非阻塞套接字是我们调用fcntl()方法并将O_NONBLOCK标志与它关联的套接字。任何人都可以告诉我,将普通TCP_IP套接字转换为非阻塞套接字还需要什么?非阻塞套接字
如果使非阻塞套接字能够很好地与Windows服务器一起工作,可能会出现什么问题?
非阻塞套接字是我们调用fcntl()方法并将O_NONBLOCK标志与它关联的套接字。任何人都可以告诉我,将普通TCP_IP套接字转换为非阻塞套接字还需要什么?非阻塞套接字
如果使非阻塞套接字能够很好地与Windows服务器一起工作,可能会出现什么问题?
实例初始化为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下使用重叠的IO插槽来获得无阻塞网络。
Look here and in MSDN how to write code with OVERLAPPED structures
在Linux使用epoll的()。
在solaris socket()上。
请注意在未准备好时读取或写入套接字。 (选择输出)因为您可能会收到EAGAIN错误。
伟大的跨平台库(但C++和新的C++标准候选)是boost :: asio。
它使用本地系统异步方法。
有没有什么办法可以在C中达到这个目的?在Windows或Linux服务器上需要注意什么? – 2009-10-06 11:46:44
听起来太像功课一样。第二个问题,不能想出一个可行的项目,需要两个广泛不同的基本操作系统编程。 – 2009-10-06 11:40:53
实际上,它旨在用于不等待在线环境中的传入流量。 – 2009-10-06 11:45:23