linux socket 阻塞 listen

来源:互联网 发布:微信网页授权java代码 编辑:程序博客网 时间:2024/04/30 06:57
首先在创建socket,,然后绑定什么就不说了,,,然后listen 监听前面创建的socket(你可以把listen当然是后台运行的监控一样)

listen语句之后一般会有accept。这个是接受连接请求的。
当监听到有连接请求来的时候,,,accept就会 重新创建一个socket(注意,该socket才是真正用来通信的)。。。。。。。

到这里楼主可明白了。。。。前面自己创建的socket只是用来listen(监听)的。。只有当监听到有连接请求时,并且accept函数接受了连接,才会创建一个新的socket。。这个新建的是用来通信的(明白)


那阻塞与非阻塞是什么情况呢? 这个只是针对accept来有意义。就是说,默认情况下,accept函数是阻塞的,就是说,在没有新连接请求来的情况下(listen监听),accept一直在这里等,函数没有返回,也就是说,卡在这个地方而不会创建新的socket,程序不会往下运行。。一旦有连接请求过来,则马上答应连接,并自行创建一个新socket,accept的返回值就是socket这值。相当于文件描述符性质。。。。

   非阻塞,用户可以设置(fcntl函数), 这种情况下,accept函数,在没有连接请求来的情况下,马上会返回,也就是说不会在这里等,程序就会往下运行,返回值会一个负数。也就是说socket没有创建成功。。。。

总的来说,用来通信的socket  是accept函数的返回值,只有真连接来的时候,accept才会返回一个正确的值,这个返回值就是socket的描述符。

 阻塞情况下,,没有连接请求来的时候,一直卡在这里,不会有返回值,也就没有创建socket,直到有请求。
非阻塞情况下,不管你有没有连接来,返正accept函数会马上执行完,并返回一个值。。当没有请求时,返回的是负数,也就是说这个socket是错误的,不可用。有请求的时候返回正数,这个就是socket描述符
原创粉丝点击