回答
显然你是使用非阻塞套接字,你需要使用select()
或poll()
以确定何时可以写(连接是写的一种形式)的插座。当您希望将数据写入连接的套接字时,情况也是如此;当你感觉喜欢它时,你不仅要写和连接,还要让套接字告诉你什么时候可以做事,同时你还做了其他事情(异步套接字操作的想法)。
检查您的联机帮助有关可用错误代码的绝对真理:
$ man connect
[EINPROGRESS]套接字是非阻塞,连接无法立即完成。可以通过选择用于写入的套接字来选择(2)以完成。
你有一个非阻塞的插座,你打电话给它connect()
。由于connect()
需要发生三次握手(所以是网络往返),它会阻止在阻塞套接字中等待SYN-ACK,或者给您一些指示,说明它尚未在非阻塞套接字中成功。通常情况下,非阻塞套接字会返回EAGAIN/EWOULDBLOCK,告诉您它们无法进步,您应该再试一次:这不完全是您的情况,connect()
返回EAGAIN/EWOULDBLOCK,因为没有免费的临时端口来告诉您应该稍后再试;所以对于非阻塞连接还有一个错误:EINPROGRESS,它告诉你该操作正在进行,你应该稍后检查它的状态。
以后要检查状态,套接字将成为准备好可写,所以你可以使用select()
/poll()/...
测试为,在这之后,你必须getsockopt(...SO_ERROR...)
让你连接的成功/失败状态()操作。
现在我只在EAGAIN/EWOULDBLOCK中发生非阻塞错误,所以在非阻塞时,如果必须做EINPROGRESS错误和EAGAIN/EWOULDBLOCK错误一起选择 – Syedsma
@Syedsma:only connect( )返回EINPROGRESS。 – ninjalj
只是想知道,如果选择返回true(例如选择写),连接成功,但最后设置的errno是EINPROGRESS。在这种情况下应该忽略这个错误? – Bionix1441
我试图连接到一个无效的本地IP地址(即不正确的子网),当这个错误,纠正主机固定问题
- 1. 什么可能是错误的原因“ReferenceError:Velocity is not defined”?
- 2. 什么可能是此错误消息的原因?
- 3. 卷曲错误35,可能的原因是什么?
- 4. “Class DOMImplementation”找不到“错误”的可能原因是什么?
- 5. 为什么缩进的错误原因是错误的功能?
- 6. 可能是以下错误的原因
- 7. JasperException的可能原因是什么
- 8. fsockopen()错误的原因是什么?
- 9. 以下错误的原因是什么?
- 10. 这是什么错误的原因
- 11. Valgrind错误的原因是什么?
- 12. 什么是以下错误的原因
- 13. ORA-00054错误的原因是什么?
- 14. 这个错误的原因是什么?
- 15. 错误'Out of memory'是什么原因?
- 16. 在Solaris C++编译器中导致“ccfe中的致命错误”编译错误的原因是什么?
- 17. 在ASP.NET中可能导致这种零星错误的原因是什么?
- 18. 内存错误的可能原因
- 19. “BUG:调度原子?”的可能原因是什么?
- 20. 什么可能是“Etat HTTP 500”错误的原因?如何解决它?
- 21. 矢量下标超出范围错误的可能原因是什么?
- 22. 为什么我不能回到回购站,错误的原因是什么?
- 23. 是什么原因
- 24. 插座未正确关闭的原因?
- 25. 什么可能是不止一次击中page_load的原因
- 26. 流不可写入异常的可能原因是什么?
- 27. 什么是对Facebook的“错误校验应用程序”可能的原因是什么?
- 28. 安装我的C#.NET应用程序时,可能是什么错误1001的原因是什么?
- 29. MacOSX Sierra中导致libdispatch错误EVFILT_MACHPORT的原因是什么?
- 30. R中的“Variable Lengths Differ”错误是什么原因?
它意味着你有一个异步的事情怎么回事,它尚未。如果你想要建设性的答案,请指定你在说什么系统调用。 – Mat
我已经指出如何继续添加手册页提取关于如何在此获取更详细的信息:http://stackoverflow.com/q/8277540/694576 – alk
无论如何,向我们展示至少您的客户的代码肯定会帮助... – alk