linux的示例init可能如下所示:
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)
Run Code Online (Sandbox Code Playgroud)
来自太阳的基本白皮书:
在Windows上您使用重叠的IO套接字来获得非阻塞网络.
在这里和MSDN中查看如何使用OVERLAPPED结构编写代码
在Linux上使用epoll().
在solaris socket()上.
在未准备就绪时,请注意读取或写入套接字.(select-output)因为您可能会收到EAGAIN错误.
伟大的跨平台库(但C++和新的c ++标准候选者)是boost :: asio.
它使用本机系统异步方法.