免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4293 | 回复: 10
打印 上一主题 下一主题

求证几个socket编程(阻塞,非阻塞)问题,谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-30 19:44 |只看该作者 |倒序浏览
在看一个资料,是一个多进程select服务器,监听套接字是非阻塞的。

求证一下几个问题:
1 非阻塞的监听套接字accept后返回的连接套接字是阻塞的,不会继承监听套接字的非阻塞特性吧?
2 对于阻塞套接字,调用send时,假设有2048个字节要发送,现在协议缓冲区只能接受1024个字节,send在这时候是否会返回1024作为返回值并结束该系统调用,还是会一直阻塞知道2048个字节都发送完再返回,我认为是前者,求证一下。
3 对于阻塞套接字,调用recv时,加入参数指定要读取2048个字节,现在只有1024个字节供读取,是否会返回1024结束recv调用呢?还是一直等待知道读到2048个字节?
4 多个进程监听同一个监听套接字,是否会引起惊群现象?

谢谢!

[ 本帖最后由 capable 于 2008-12-30 20:15 编辑 ]

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
2 [报告]
发表于 2008-12-30 20:15 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2008-12-30 20:44 |只看该作者
1、不会继承
2、3在man中说的很清楚
4、印象中是有惊群现象的,本版有一篇讨论惊群的精华贴,你可以搜搜。

论坛徽章:
0
4 [报告]
发表于 2008-12-30 20:56 |只看该作者
谢谢3楼!
recv:
       If no messages are available at the socket, the receive calls wait  for
       a message to arrive, unless the socket is nonblocking (see fcntl(2)) in
       which case the value -1 is returned and the external variable errno set
       to EAGAIN.  The receive calls normally return any data available, up to
       the requested amount, rather than  waiting  for  receipt  of  the  full
       amount requested.
证明问题2的答案是前者。

send:
       When the message does not fit into the send buffer of the socket,  send
       normally  blocks, unless the socket has been placed in non-blocking I/O
       mode.  In non-blocking mode it would return EAGAIN in this  case.   The
       select(2)  call  may  be  used to determine when it is possible to send
       more data.

send的似乎没说清楚,“does not fit into”指的是all还是any?

论坛徽章:
0
5 [报告]
发表于 2008-12-30 21:15 |只看该作者

回复 #4 capable 的帖子

On  success,  these calls return the number of characters sent.  On error, -1 is returned, and errno is set appro-
       priately.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2008-12-30 21:29 |只看该作者
原帖由 c/unix 于 2008-12-30 20:15 发表
自己写个server和client测测不就可以了。

实验虽然很重要,但是还是应该以手册为准。

论坛徽章:
0
7 [报告]
发表于 2008-12-31 00:10 |只看该作者
原帖由 flw 于 2008-12-30 21:29 发表

实验虽然很重要,但是还是应该以手册为准。

说反了吧

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
8 [报告]
发表于 2008-12-31 00:27 |只看该作者
原帖由 capable 于 2008-12-30 19:44 发表
在看一个资料,是一个多进程select服务器,监听套接字是非阻塞的。

求证一下几个问题:
1 非阻塞的监听套接字accept后返回的连接套接字是阻塞的,不会继承监听套接字的非阻塞特性吧?


Linux内核2.6.28提供了一个系统调用accept4,可以让新建立的套接字具备非阻塞属性

论坛徽章:
0
9 [报告]
发表于 2008-12-31 09:54 |只看该作者
一般和select一起使用来保证接受和发送全部数据.

论坛徽章:
0
10 [报告]
发表于 2008-12-31 11:12 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP