Смотрим почти любой пример TCP сервера на C:
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
if (listen(server_fd, 3) < 0) {
perror("listen");
exit(EXIT_FAILURE);
}
while(1) {
if ((new_socket = accept(server_fd, (struct sockaddr *)&address,
(socklen_t*)&addrlen))<0) {
perror("accept");
exit(EXIT_FAILURE);
}
//Handle new connection with new_socket
}
Что тут не так?
А то что сканер портов (nmap например) "положит" наш сервер.
accept возвращает ошибку и все.
Сказать, что я охренел - ничего не сказать.