请教关于套接字的问题

csw 2002-07-23 10:08:54
1。套接字中有很多步都是同时具备同步和异步的调用,假设在某个地方
调用的是同步函数,而另外一个地方调用的是异步函数,那么整个过程
表现的是同步还是异步呢?
2。关于原始套接字,如果创建的是一个原始UDP套接字,那么发送接受的是不是
都是有IP头和UDP头的呢?那假设发送端用原始的,那么需要自己构造IP头等
信息?那么如果在接受端用普通的,能收到IP头吗?那个IP_hdrincl又是什么
意思?
...全文
42 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
csw 2002-07-28
  • 打赏
  • 举报
回复
谢谢
xuying 2002-07-28
  • 打赏
  • 举报
回复
自己写写程序就知道了,光看书有什么用。
csw 2002-07-28
  • 打赏
  • 举报
回复
刚看了一下书,觉得你的说法好象有点问题,
SIO_RCVALL是接受所有的封包,而不是那个头,
而ip_hdrincl选项是才保证了“促使接受
函数将IP头包括为自己数据的一部分”
我这几个概念一直不清楚,希望向你请教
QQ:33854303。谢谢。
xuying 2002-07-28
  • 打赏
  • 举报
回复
是的,是在收到的buffer中包含了ip头,否则就只有数据。
csw 2002-07-28
  • 打赏
  • 举报
回复
哦。请问你的意思是不是这样:
使用ip_hdrincl可以在发送端构造自己的IP头,使用sio_rcvall
可以在接受端解析自己的IP头?。。
那我看那本网络编程选项那章提到:
为了取得IP选项中的数据,必须设置为原始套接字,请问这个具体
在数据格式上起到个什么作用呢?是在收到的BUFFER里面包括了
IP头吗?还是什么意思呢。谢谢。
xuying 2002-07-28
  • 打赏
  • 举报
回复
ip_hdrincl是用于发送端填写报文头的,接收端又不需要填写报文头。
如果要在接收端解析报文,用sio_rcvall。
csw 2002-07-28
  • 打赏
  • 举报
回复
那么请问如果我用了这个选项是不是就是在接受端可以自己解析包头呢?
那如果是这样的话,跟原始的有什么关系呢?谢谢
xuying 2002-07-28
  • 打赏
  • 举报
回复
1. 你的socket可以确定是同步还是异步。如果是异步调用的时候阻塞了,会出现wouldblock错误。

2. 不论你用什么socket,发出的报文都是有ip报文头的,只不过一般是由系统填写ip报文头,而用了ip_hdrincl后,由你的程序填写ip报文头。接收方收到报文后是不会区分是你的程序添的报文头,还是由系统添的。都会按同样的方式解析报文头。
young_wind 2002-07-24
  • 打赏
  • 举报
回复
接受到的任何TCP和UDP分组都不会传递给原始套接口
如果IP_HDRINCL没设置,内核写的数据起始地址为IP头部后的第一个字节,这样内核会构造头部
如设置了则内核写的数据起始地址为IP头部的第一个字节,这样你的进程就要构造IP头部了

city_lovelace 2002-07-23
  • 打赏
  • 举报
回复
解答2:
好像没有办法创建的是一个原始UDP套接字,两者不能皆有;
不需要自己构造IP头;
IP_hdrincl是自己构造IP头,IP层不修改这个IP头

4,391

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧