- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在调用 closesocket()
时注意到一个奇怪的行为。如果我创建一个调用 recv()
的线程,则 closesocket()
将向另一端发送一个 RST
数据包。但是,如果我不创建接收线程,则 closesocket()
将执行正常断开连接(4 次握手)。
以下代码将导致 closesocket()
发送一个 RST
数据包:
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <process.h>
unsigned int __stdcall thread(void *s)
{
char buffer[1024];
recv((SOCKET)s, buffer, 1024, 0);
return 0;
}
int main()
{
WSADATA wsa;
WSAStartup(MAKEWORD(2, 2), &wsa);
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("173.194.116.18");
addr.sin_port = htons(80);
connect(s, (sockaddr*)&addr, sizeof(addr));
// Start thread
_beginthreadex(0, 0, thread, (void*)s, 0, 0);
Sleep(1000); // give thread some time to start
// RST packet will be sent (if you remove the receive thread then a graceful disconnection will be performed)
closesocket(s);
return 0;
}
注意:我正在使用阻塞套接字。
最佳答案
如果客户端发送多个字节,服务器将读取第一个字节并使用其接收队列中的数据调用关闭,导致将 RST 发送到客户端。客户端将在调用 recv() 时被阻塞,等待来自服务器。收到 RST 后,DieWithError() 报告连接被对等方重置的问题。所以shutdown可以在调用close之前使用。希望这篇文章对你相关的RST有所帮助http://cs.ecs.baylor.edu/~donahoo/practical/CSockets/TCPRST.pdf
关于c++ - 奇怪的 closesocket() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28941572/
如果我想从 1 个线程在服务器套接字上调用 closesocket() 是否安全,该线程与使用相同服务器套接字运行服务器的另一个线程分开? 最佳答案 调用本身是线程安全的,但实践不是。每当您解除分配其
这是我关闭套接字的方式: LINGER lingerStruct; lingerStruct.l_onoff = 1; lingerStruct.l_linger = 0; setsockopt(Cl
我在调用 closesocket() 时注意到一个奇怪的行为。如果我创建一个调用 recv() 的线程,则 closesocket() 将向另一端发送一个 RST 数据包。但是,如果我不创建接收线程,
因为我认为我可以通过阅读 MSDN 对 closesocket 的描述来自己回答这个问题,所以我想让一位有经验的人确认它,因为 MSDN 只是从我读过的内容中暗示它。 WSAENOBUFS 是缺少对已
这个调用应该在很短的时间后返回,但在某些机器上它莫名其妙地花费了接近 1 秒的时间。有没有人看到这个问题。我正在使用环回地址,因此网络应该不在画面中。 最佳答案 问题可能出在窗口套接字实现的某个地方。
我目前正在使用 C++ 开发服务器应用程序。我的主要灵感来自这些例子: Windows SDK IOCP Excample The I/O Completion Port IPv4/IPv6 Serv
我在生产服务器上遇到了一个奇怪的情况。 我们有一个用 C++ 编写的网络应用程序,它通过使用 IOCP 编写的 TCP 服务于用户请求。 两天前我们对 Windows 2012 R2 进行了更新(它安
在我的应用程序中,我在同一个套接字上调用了两次 shutdown 和 closesocket 函数。我知道这样做是不对的,我必须确保这些函数只被调用一次。但是,为什么这些调用中的任何一个在第二次调用时
我将尝试用几个例子来解释我的意思: socket() -> WSASocket() connect() -> WSAConnect() send() -> WSASend() sendto() ->
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在处理一个现有的 DLL,其中创建了一个 TCP 监听套接字,并设置为在出现故障时使用 SO_REUSEADDR 立即重新绑定(bind)到同一个套接字。然而,目前存在一个问题,即使在成功调用 c
我使用 WinAPI 为套接字操作编写了 C++ 服务。客户端和服务之间的通信很简单,连接到服务后,客户端发送一些数据,服务立即发送响应。 服务端的主套接字(ListenSocket)是这样创建的:
我是一名优秀的程序员,十分优秀!