如何检测是否在远程端的套接字上调用了Socket#close() ?
在每一个在BSD套接字编程环境中运行的例子和讨论中,似乎将文件描述符设置为非阻塞I / O模式的推荐方式是使用fcntl()的O_NONBLOCK标志,例如 int flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK); 我已经在UNIX上进行了十多年的networking编程,并一直使用FIONBIO ioctl()调用来执行此操作: int opt = 1; ioctl(fd, FIONBIO, &opt); 从来没有真正想过为什么。 刚刚就这样学习了。 有没有人有任何评论可能各自的优点之一? 我认为可移植性轨迹有所不同,但不知道ioctl_list(2)对于个体ioctl方法的方面没有说明的程度。
这两者有什么区别? 我注意到,如果我从一个工作程序中的socket.send更改为socket.emit ,服务器无法收到消息,但我不明白为什么。 我还注意到,在我的程序中,如果我从socket.emit更改为socket.send ,服务器收到一条消息,但似乎多次接收它。 当我使用console.log()来查看服务器接收到的内容时,它显示了与使用socket.emit不同的socket.emit 。 为什么这种行为? 你怎么知道什么时候使用socket.emit或socket.send ?
我正在玩HTML5 WebSockets。 我想知道,如何优雅地closures连接? 就像,如果用户刷新页面,或只是closures浏览器会发生什么? 当用户只是刷新页面而不调用websocket.close() – 当它们在刷新之后返回时,它会碰到websocket.onclose事件,这是一个奇怪的行为。
我正在构build需要使用套接字连接与另一个应用程序通信的Web应用程序。 对我来说这是一个新的领域,所以要确保套接字不同于websocket 。 看起来他们只是在概念上相似。 问起,因为最初我计划使用Django作为我的项目的基础,但是在上面链接的SOpost中,已经明确指出websocket是不可能的(或者至less不可靠,即使是像django-websockets )使用首选的Django设置(Apache与mod_wsgi)。 然而,我发现其他职位随便导入Python的套接字模块,像抓住服务器的主机名一样简单。 所以: 他们真的不一样吗? 有没有任何理由不使用Django的项目,依靠与外部服务器build立套接字连接?
套接字(stream)与套接字(数据报)有什么区别? 为什么使用一个呢?
3个问题: 连接和读取套接字的超时有什么区别? 连接超时设置为“无穷大”是什么意思? 在什么情况下可以留在不定式循环中? 什么会触发无限循环死亡? 读取超时设置为“无限”是什么意思? 在什么情况下可以留在不定式循环中? 什么会触发无限循环死亡?
如何以编程方式确定使用Java的给定机器中端口的可用性? 即给定一个端口号,确定它是否已被使用?
我在C中有一些关于套接字库的问题。下面是我在我的问题中提到的一段代码。 char recv_buffer[3000]; recv(socket, recv_buffer, 3000, 0); 我如何决定recv_buffer有多大? 我正在使用3000,但它是任意的。 如果recv()收到比我的缓冲区大的数据包,会发生什么? 我怎么知道我是否收到了整个消息,而又不需要再次调用recv,并且在没有任何东西需要接收的时候能够永远等待呢? 有没有办法让缓冲区没有一个固定的空间,所以我可以继续增加它,而不用担心空间不足? 也许使用strcat将最新的recv()响应连接到缓冲区? 我知道这是一个很多的问题,但我会非常感激任何答复。
在socket编程中,read()和recv()之间以及send()和write()之间有什么区别? 性能和速度等行为。