Unix网络编程之socket异步编程

ioctl

我们常用ioctlsocket的FIONBIO模式对socket进行设置是否启用异步。

1
int ioctlsocket(int sockfd, long cmd, unsigned long* args);

ioctlsocket函数的作用是获取与套接字sockfd相关的操作参数,可用于任何状态的任一套接字,与具体的协议无关.

参数说明

  • sockfd : 待操作的socket描述符
  • cmd : 对sockfd的做操类型,包括以下几种
    • FIONBIO : 允许或者禁止套接字sockfd的费阻塞模式,若args为1,则是允许非阻塞模式;若args为0,禁止非阻塞模式。
    • FIONREAD : 确定套接字sockfd自动读入设为数量,arg存储ioctlsocket的返回值.若sockfd是SOCKET_STREAM类型,则FIONREAD返回一次recv所接受的所有的数据量,这通常与套接字中排队的数据总量相同。如果sockfd是SOC_DGRAM类型,则FIONREAD返回套接字上排队的第一个数据报的大小。
    • SIOCATMARK : 确定是否所有的带外数据都已经被读入,这个类型只适用于SOCK_STREAM套接字接口。
  • args : 指示参数