Please enable JavaScript.
Coggle requires JavaScript to display documents.
socket (:lemon:UNIX域 (:heavy_dollar_sign:作用 (:two:可以传递文件描述符 (:warning:注意 (…
socket
:lemon:UNIX域
:heavy_dollar_sign:作用
:one:主机内进程间传递信息
:two:可以传递文件描述符
:warning:注意
:one:TCP/IP套接字是不能传递文件描述符
:two:直接传递整数自然是不行的
:apple:bind创建的socket文件的权限是
07777&(~umask)=755
:banana:sun_path
:coffee:使用绝对路径,一般为
/tmp/xxxx
:zap:客户端和服务端不再同一目录时,可能会出现问题
:sweat_drops:问题
:one:UNIX域的流协议有粘包问题
:warning:UNIX域流式套接字connect发现监听队列满时,会立刻返回1个ECONNREFUSED.(TCP则是忽略到来的SYN,导致对方重传SYN)
:zap:naming
:one:IP + Port = socket
:two:写程序的方式,API,函数库
:three:socket编程里的第一个调用的函数名就是socket,要说明使用什么协议
:four:socket API返回的句柄也叫做socket
:link:links
:one:
socket笔记
:two:
socket实现
:three:
socket接口
:wrench:op
:two:关闭套接字
:two:shutdown
:fire:可以有选择地关闭套接字的读取/写入一端
:warning:SHUT_WR不关心引用计数,直接向对方发送FIN
:zap:回射服务器中,如果C向S发送a,b,c,d,FIN,那么S写入a,b,c,d到接口缓冲区之前如果收到FIN的话,就无法发送给C回应了
:maple_leaf:对于A来说,A只需要关闭套接字的写入部分就行了
:snowflake:可以在服务端中write前sleep一阵时间,那么a,b,c,d,FIN就子啊缓冲区里就绪了,而服务端也无法回应
:coffee:回射客户端应该使用shutdown,而不能使用close.服务端调用真正的close
:link:
回射服务器中使用shutdown解决关闭后不能读取的问题
:one:close
:warning:close某个套接字后先引用计数-1,如果减为0,就向对方发送FIN
:explode:如果在父进程里关闭连接套接字,而子进程里保留,那么并不会发送FIN
:one:打开套接字
:warning:coding consideration
:apple:字节序
:warning:sockaddr_in等结构体里的ip和端口都有这个问题,除此之外等等
:star:使用到整数的时候,网络字节序和主机字节序必须进行转换
网络字节序是Big Endian
:cherry_blossom:theory
:one:functions
:heavy_dollar_sign:applications
:one: communication between process (same / different hosts)