为了账号安全,请及时绑定邮箱和手机立即绑定

TCP/IP 三次握手后该怎么去理解read和write函数中的参数?

TCP/IP 三次握手后该怎么去理解read和write函数中的参数?

温温酱 2019-01-29 19:07:37
TCP/IP 三次握手后该怎么去理解read和write函数中的参数?
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

  1. 描述符都是本地的概念,它的值只是内核文件系统中对socket/sock数据结构的一个"别称"而已。创建socket时,内核创建socket/sock数据结构,并返回给你一个fd。以后你用这个fd进行 send或者recv,内核才能找到时哪个socket。


(个人感觉这里的cfd是否就可以理解是保存了客户端的地址信息,相当于客户端的套接字?)也就是说这里读写时使用的是对方的套接字进行读写的?

cfd是属于Server的套接字描述符,只是它对应的套接字保存了通信双方的信息,只能说是连接到client的套接字

客户端如果没有给套接字使用bind,操作系统会自动分配地址信息绑定到这个套接字上,那就说明客户端中的fd依然是客户端自身的套接字?

Bind 就是手动指定为一个套接字指定本端地址信息(比如IP和port)。一般Clinet不关心自己使用的端口号,所以一般Clinet不用Bind,实在要Bind也没啥问题,只要不要和已有的冲突就行。

另外,关于

在服务端编程时,会创建两个文件描述符sfd和cfd,其中sfd用来绑定服务端的地址信息,后面调用accept的时候,使用的实参是sfd,返回给了cfd

sfd是监听(listen)套接字,accept返回的cfd是子连接,本端信息继承sfd,对端信息来源于对端的SYN报文


查看完整回答
反对 回复 2019-03-13
  • 2 回答
  • 0 关注
  • 593 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信