草庐IT

SEQPACKET

全部标签

sockets - SOCK_SEQPACKET 可用性?

当使用原始TCP套接字时,需要进行消息帧化,如here所述,带有长度前缀或分隔符。我今天遇到了“SOCK_SEQPACKET”套接字选项,它显然可以几乎透明地进行消息框架。目前“SOCK_SEQPACKET”在平台和操作系统中的可用性如何?(Windows、OSX、Linux、IOS、安卓...) 最佳答案 如果你使用AF_INET的SOCK_SEQPACKET,这样:socket(AF_INET,SOCK_SEQPACKET,0);您不会获得TCP套接字。如果您的平台支持,套接字将是SCTP套接字。SCTP尚未广泛使用。最新的Li

linux - 如何读取/写入 SOCK_SEQPACKET 套接字?

我尝试使用SOCK_SEQPACKET套接字:intrc,len;intworker_sd,pass_sd;charbuffer[80];structioveciov[1];structmsghdrmsg;memset(&msg,0,sizeof(msg));memset(iov,0,sizeof(iov));iov[0].iov_base=buffer;iov[0].iov_len=sizeof(buffer);msg.msg_iov=iov;msg.msg_iovlen=1;if((socket_fd=socket(AF_UNIX,SOCK_SEQPACKET,0))问题是进程不等

c - 找出 AF_UNIX + SOCK_SEQPACKET 最大消息大小

我想知道是否有可能找出SEQPACKET的最大长度除了实验性的(a-lafor(i=0;i)。还有,第二个问题:如果我收到errno==EMSGSIZE试图发送AF_UNIXSEQPACKET,是否保证这是因为最大消息大小,还是可能有其他原因? 最佳答案 限制来自变量sysctl_wmem_default。它在proc文件系统中可见:/proc/sys/net/core/wmem_max不同的Linux版本在这一点上可能有不同的实现。但是对于UNIXdomainsockets有这样的代码:sk->sk_sndbuf=sysctl_w

c++ - 为什么我在 Linux 上看不到 SOCK_SEQPACKET 的 MSG_EOR?

我有两个进程通过使用socketpair()和SOCK_SEQPACKET创建的一对套接字进行通信。像这样:intipc_sockets[2];socketpair(PF_LOCAL,SOCK_SEQPACKET,0,ipc_sockets);据我了解,当收到SOCK_SEQPACKET记录时,我应该在“structmsghdr”的msg_flags成员中看到MSG_EOR。我在sendmsg()中设置MSG_EOR以确保该记录被标记为MSG_EOR,但在recvmsg()中接收时我没有看到它。我什至尝试在发送记录之前在msg_flags字段中设置MSG_EOR,但这根本没有任何区别。