O kernel lida com o handshake TCP por padrão
Tente fazer uma conexão TCP
$ telnet localhost 8877
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Aqui, a conexão é recusada diretamente pelo kernel.
Para parar de lidar com conexões TCP do kernel, você pode adicionar regras do netfilter.
O seguinte comando faz o kernel ignorar os pacotes TCP que chegam à porta 8877
sudo iptables -A INPUT -p tcp --destination-port 8877 -j DROP
Agora tente fazer uma conexão TCP novamente
$ telnet localhost 8877
Trying 127.0.0.1...
^C (Killed by me as it gets stuck here)
O kernel não faz o handshake TCP agora, e você deve ser capaz de implementar o TCP no userspace, pois você ainda verá os pacotes 1 .
Para limpar a regra do netfilter depois de terminar, use
sudo iptables -D INPUT -p tcp --destination-port 8877 -j DROP