我想知道:当使用套接字(AF_UNIX)在C中编程时,在向套接字发送或从套接字接收时是否有任何限制(以字节为单位)?
发布于 2010-06-16 18:58:12
您可以使用setsockopt (SO_SNDBUF和SO_RCVBUF)更改每个单独套接字连接的读写缓冲区。
默认大小和最大大小取决于平台。
此外,如果您为每个单独的读取提供更大的用户端缓冲区,例如使用recv。
如果你按顺序使用几个recv,你可以通过一个连接读取无限大的字节,这只需要无限长的时间。
发布于 2010-06-16 19:16:13
套接字的行为是依赖于实现的。通常,当您发送()时,不能保证有多少字节会被推送到套接字上。由于内核控制这一点,它可以是任何数字,通常在1500或更小的范围内。因此,您需要做的是检查send()返回代码,并不断将数据推送到套接字上,直到完成为止。此示例假设您已使用以下命令将套接字设置为非阻塞:
fcntl(s, F_SETFL, O_NONBLOCK);
int sendall(int s, char *buf, int *len)
{
int total = 0; /* how many bytes we've sent */
int bytesleft = *len; /* how many we have left to send */
int n=0;
int retries=0;
struct timespec tp={0,500};
while(total < *len)
{
n = send(s, buf+total, bytesleft, 0);
if (n == -1)
{
/* handle errors here,
plus check for EWOULDBLOCK
and then nanosleep()
*/
}
total += n;
bytesleft -= n;
}回答你的问题-不,没有限制,你只是不能用一个send()调用发送所有的数据。
https://stackoverflow.com/questions/3052587
复制相似问题