首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tru64上的sendto返回ENOBUF

Tru64上的sendto返回ENOBUF
EN

Stack Overflow用户
提问于 2010-05-11 18:46:42
回答 1查看 949关注 0票数 2

我目前在Tru64上运行一个旧系统,它使用sendto()函数使用了大量的UDP套接字。在我们的代码中,套接字用于向/从各种进程发送消息,然后最终发送到远程连接的胖客户端应用程序。有时,胖客户端的套接字会卡住,这可能会导致其中一些消息堆积起来。我的问题是如何确定当前的缓冲区大小,以及如何确定最大消息缓冲区。下面的代码给出了我如何设置端口和使用sendto函数的代码片段。

代码语言:javascript
复制
/* 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上,问题似乎没有出现在那里。

任何帮助都将不胜感激。

问候

EN

回答 1

Stack Overflow用户

发布于 2010-09-11 06:41:33

您可能应该使用某种类型的拥塞控制,以避免网络过载。到目前为止,最简单的方法是使用TCP而不是UDP。

它在Linux上失败的频率较低,因为UDP套接字在Linux上等待本地网络接口队列中的空间(除非您将它们设置为非阻塞)。但是,对于任何操作系统,如果超满队列不在本地系统中,数据包将被静默丢弃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2809972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档