1. 程式人生 > >socket設定為非阻塞模式

socket設定為非阻塞模式

1,套接字的預設狀態是阻塞的。即當發出一個不能立即完成的套接字呼叫時,該程序將被投入睡眠,等待相應操作完成。

2,阻塞的套接字分為下面四類:

  • 輸入操作:包括read、recv、recvfrom和recvmsg。
  • 輸出操作:包括write、send、sendto和sendmsg。
  • 接受外來連線,accept 函式。
  • 發起外出連線,connect 函式。

 3,將一個socket 設定成非阻塞模式,使用fcntl方法:

int flags;
if ((flags = fcntl(fd, F_GETFL, NULL)) < 0) {
    return -1;
}
if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
    return -1;
}