非阻塞套接字是我們調用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