在服务器上挂接WSASend/ wssarecv时,套接字无效
Socket is invalid while hooking WSASend/WSARecv on the server
我在c++中使用与我用来钩住客户端的WSASend和WSARecv函数相同的方法钩住WSASend和WSARecv。在客户端,我能够从WSASend/WSARecv传递的Socket结构中获得IP,端口和套接字;然而,对于服务器,当我尝试使用getpeername或getsockname()时,它们都返回错误10057(套接字未连接)…
我很确定钩子在服务器上是正确的,因为它成功地打印了字节,我也确定套接字应该是有效的,看看客户端和服务器如何建立成功的连接。
有没有其他方法可以解决这个问题?我一直在网上寻找解决方案,但我没有看到任何人有同样的问题。
我试过了:
sockaddr *address = new sockaddr;
int peer_len;
getpeername(s, address, &peer_len);
int err = WSAGetLastError();
if(err==0)
{
char *Str = inet_ntoa(((sockaddr_in*)address)->sin_addr);
printf("[%s", Str);
printf(":%d]",ntohs(((sockaddr_in*)address)->sin_port));
}
else
{
printf("Error %in",err);
}
(同时使用getpeername和getsockname)两者都会导致相同的套接字未连接错误。
我计划使用c++ dll获得的数据包并将信息转发到c# dll,因为它更容易管理(对我来说无论如何),但我需要区分每个数据包与它的套接字id。
您只能在连接的套接字上执行此操作,即从accept()
调用返回的套接字,而不能在侦听的"服务器"套接字上执行此操作。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- C++套接字对不读/写父/子
- 非更新套接字消息
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- 在服务器上挂接WSASend/ wssarecv时,套接字无效