【发布时间】:2010-05-11 10:46:42
【问题描述】:
我目前在 Tru64 上运行一个旧系统,其中涉及使用 sendto() 函数的大量 UDP 套接字。套接字在我们的代码中用于向/从各种进程发送消息,然后最终发送到远程连接的胖客户端应用程序。有时,胖客户端的套接字会卡住,这可能会导致其中一些消息堆积起来。我的问题是如何确定当前缓冲区大小,以及如何确定最大消息缓冲区。下面的代码给出了我如何设置端口和使用 sendto 函数的 sn-p。
/* need to adjust the maximum size we can send on this */
/* as it needs to be able to cope with the biggest */
/* messages we send */
lenlen = sizeof(len) ;
/* allow double for when the system is under load */
int lenlen, len ;
lenlen = sizeof(len) ;
len = 2 * 32000;
msg_socket = socket( AF_UNIX,SOCK_DGRAM, 0);
result = setsockopt(msg_socket, SOL_SOCKET, SO_SNDBUF, (char *)&len, lenlen) ;
result = sendto( msg_socket,
(char *)message,
(int)message_len,
flags,
dest_addr,
addrlen);
注意。我们已将此应用程序移植到 Linux,但问题似乎并未出现。
任何帮助将不胜感激。
问候
【问题讨论】: