免费注册 查看新帖 |

Chinaunix

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

setsocketopt 与select 有什么区别啊! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-15 15:38 |只看该作者 |倒序浏览
setsocketopt 与select 有什么区别啊!好像都是对进程阻塞用的吧,不太明白,哪位给讲一下?谢谢!

论坛徽章:
0
2 [报告]
发表于 2005-06-15 15:43 |只看该作者

setsocketopt 与select 有什么区别啊!

???
怎么这俩也能混一起呢?

论坛徽章:
0
3 [报告]
发表于 2005-06-15 15:45 |只看该作者

setsocketopt 与select 有什么区别啊!

只是不太明白,能不能解释一下?各自的意思?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-06-15 15:46 |只看该作者

setsocketopt 与select 有什么区别啊!

按英文意思理解?
倒了.
建议去看书.
或者看免费的man手册.

论坛徽章:
0
5 [报告]
发表于 2005-06-15 15:48 |只看该作者

setsocketopt 与select 有什么区别啊!

  1. setsockopt(设置socket状态)        
  2. 相关函数
  3. getsockopt
  4.        
  5. 表头文件
  6. #include<sys/types.h>;
  7. #include<sys/socket.h>;
  8.        
  9. 定义函数
  10. int setsockopt(int s,int level,int optname,const void * optval,,socklen_toptlen);
  11.        
  12. 函数说明
  13. setsockopt()用来设置参数s所指定的socket状态。参数level代表欲设置的网络层,一般设成SOL_SOCKET以存取socket层。参数optname代表欲设置的选项,有下列几种数值:
  14. SO_DEBUG 打开或关闭排错模式
  15. SO_REUSEADDR 允许在bind()过程中本地地址可重复使用
  16. SO_TYPE 返回socket形态。
  17. SO_ERROR 返回socket已发生的错误原因
  18. SO_DONTROUTE 送出的数据包不要利用路由设备来传输。
  19. SO_BROADCAST 使用广播方式传送
  20. SO_SNDBUF 设置送出的暂存区大小
  21. SO_RCVBUF 设置接收的暂存区大小
  22. SO_KEEPALIVE 定期确定连线是否已终止。
  23. SO_OOBINLINE 当接收到OOB 数据时会马上送至标准输入设备
  24. SO_LINGER 确保数据安全且可靠的传送出去。
  25.        
  26. 参数
  27. optval代表欲设置的值,参数optlen则为optval的长度。
  28.        
  29. 返回值
  30. 成功则返回0,若有错误则返回-1,错误原因存于errno。
  31.        
  32. 附加说明
  33. EBADF 参数s并非合法的socket处理代码
  34. ENOTSOCK 参数s为一文件描述词,非socket
  35. ENOPROTOOPT 参数optname指定的选项不正确。
  36. EFAULT 参数optval指针指向无法存取的内存空间。
复制代码

论坛徽章:
0
6 [报告]
发表于 2005-06-15 15:51 |只看该作者

setsocketopt 与select 有什么区别啊!

不详细,简单看看先
select () 是多路监听用的
可以看看APUE理的介绍

论坛徽章:
0
7 [报告]
发表于 2005-06-15 15:54 |只看该作者

setsocketopt 与select 有什么区别啊!

谢谢!这两天真是麻烦大家了,呵呵!

论坛徽章:
0
8 [报告]
发表于 2005-06-16 01:54 |只看该作者

setsocketopt 与select 有什么区别啊!

你说话怎么跟日本人似的,看漫画看多了?

select是看你用FD_SET标记的若干个socket里面有没有event发生。
所谓的event发生就是这个socket受到了数据

如果这个socket是监听端口的,那么它收到数据意味着可能被connet了(受到了syn?),这时你应该accept,如果是已经建立的连接,受到了数据你就应该recv了。

如果这个函数返回了一个SOCKET_ERROR,那么有可能被切断了(socket读到了一个EOF?),你应该close。虽然SOCKET_ERROR有n种可能,但一般select如果失败了,你就可以把这个socket给断掉好了。可以看errno是多少号

select函数可以设等时,在这一定时间内如果没有任何数据,他会返回一个0,这时你再看着办,总比永远阻塞下去好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP