Пример init для linux может выглядеть так:
int flags;
s = socket(PF_INET, SOCK_STREAM, IPPROTO_IP) // ret 5
setsockopt(s, SOL_TCP, TCP_NODELAY, [1], 4)
setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, [1], 4)
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, [1], 4)
flags = fcntl(s,F_GETFL,0);
assert(flags != -1);
fcntl(s, F_SETFL, flags | O_NONBLOCK);
connect(s, {sa_family=AF_INET, sin_port=htons(5001), sin_addr=inet_addr("192.168.0.68")}, 16)
Основная белая бумага от солнца:
солнце асыч нетто
В Windows Вы используете перекрывающиеся сокеты ввода-вывода, чтобы получить не блокирующую сеть.
Посмотрите здесь и в MSDN, как писать код с ПЕРЕКРЫТЫМИ структурами
В Linux используйте epoll ().
На разъеме Solaris ().
Будьте внимательны, чтобы читать или писать в сокет, когда он не готов.
(выберите-выход) Потому что вы можете получить ошибку EAGAIN.
Отличная кроссплатформенная библиотека (кроме C ++ и нового стандартного кандидата на c ++) является boost :: asio.
Используются собственные системные асинхронные методы.
повышение :: ASIO