套接字:是什么导致 read() 返回 EINVAL?

发布于 2024-11-07 09:00:59 字数 278 浏览 1 评论 0原文

套接字客户端程序与服务器建立连接, 使用(阻塞)read() 写入一些字节并等待响应。

但这会失败并出现错误EINVAL(“无效参数”)。 之前对套接字的 create()bind()connect() 调用已成功完成。

我的问题

  • 这里出了什么问题?

平台是Linux x64。

A socket client program establishes a connection with the server,
writes some bytes and waits for response using the (blocking) read().

But this fails with the error EINVAL ("Invalid argument").
Previous calls to create(), bind() and connect() the socket have been made successfully.

My Question

  • What's wrong here?

Platform is Linux x64.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雨落星ぅ辰 2024-11-14 09:00:59

fd 附加到一个对象,该对象是
不适合阅读;或文件
使用 O_DIRECT 标志打开,并且
buf 中指定的地址,
count 中指定的值,或
当前文件偏移量不合适
对齐。

请参阅http://www.kernel.org/ doc/man-pages/online/pages/man2/read.2.html

fd is attached to an object which is
unsuitable for reading; or the file
was opened with the O_DIRECT flag, and
either the address specified in buf,
the value specified in count, or the
current file offset is not suitably
aligned.

See http://www.kernel.org/doc/man-pages/online/pages/man2/read.2.html

鸠书 2024-11-14 09:00:59

问题是我向 read() 函数传递了 1 个字节的大小。
好像不支持这个
(为什么?最小大小是多少?必须是 2/平台位数的倍数吗?)。

现在我传递了 8 并且它可以工作。
谢谢大家的评论。

The problem was that I passed a size of 1 byte to the read() function.
It seems that this is not supported
(why? what is the minimum size? must it be a multiple of 2/the bitness of the platform?).

Now I am passing 8 and it works.
Thank you all for your comments.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文