Я запускаю его и получаю:
# ./a.out
Got some bytes : 176
Got some bytes : 168
Got some bytes : 168
#
Я предполагаю, что это будет что-то действительно странное, например, у вас нет разрешения на открытие сокета, и stderr странным образом перенаправляется.
Я бы предложил старую добрую отладку с волчьей ловушкой:
printf("I got ti 1\n");
if ((sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)) == -1) {
printf("Socket failed!!\n");
return -1;
}
printf("I got to 2\n");
for(i=0; i < 3; i++) {
printf("About to read socket.\n");
recv_length = recv(sockfd, buffer, 8000, 0);
printf("Got some bytes : %d\n", recv_length);
}
printf("Past the for loop.\n");
... и посмотри, что там написано.