Created
October 7, 2020 20:55
-
-
Save davinci26/af6d00d14e573b2f0838aab337d840e7 to your computer and use it in GitHub Desktop.
TCP_INFO usage on Windows
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define WIN32_LEAN_AND_MEAN | |
#define _CRT_SECURE_NO_WARNINGS | |
#define _WINSOCK_DEPRECATED_NO_WARNINGS | |
#include <windows.h> | |
#include <winsock2.h> | |
#include <mstcpip.h> | |
#include <iostream> | |
#pragma comment(lib, "ws2_32.lib") | |
int main(int argc, char** argv) { | |
WSADATA wsaData; | |
int rc = WSAStartup(MAKEWORD(2, 2), &wsaData); | |
auto sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | |
if (sockfd == INVALID_SOCKET) | |
{ | |
rc = WSAGetLastError(); | |
std::cout << "Failed to create socket with error: " << rc << std::endl; | |
return rc; | |
} | |
struct sockaddr_in server; | |
server.sin_addr.s_addr = inet_addr("1.1.1.1"); | |
server.sin_family = AF_INET; | |
server.sin_port = htons(80); | |
//Connect to remote server | |
rc = connect(sockfd, (struct sockaddr*)&server, sizeof(server)); | |
if (rc == SOCKET_ERROR) | |
{ | |
rc = WSAGetLastError(); | |
std::cout << "Failed to connect socket with error: " << rc << std::endl; | |
WSACleanup(); | |
return rc; | |
} | |
TCP_INFO_v0 tcpinfo; | |
DWORD infoVersion = 0; | |
DWORD bytesReturned = 0; | |
rc = ::WSAIoctl(sockfd, SIO_TCP_INFO, &infoVersion, sizeof(infoVersion), &tcpinfo, sizeof(tcpinfo), &bytesReturned, nullptr, nullptr); | |
if (rc == SOCKET_ERROR) { | |
rc = WSAGetLastError(); | |
std::cout << "Failed to query for TCP_INFO with error: " << rc << std::endl; | |
WSACleanup(); | |
return rc; | |
} | |
rc = closesocket(sockfd); | |
if (rc == SOCKET_ERROR) { | |
rc = WSAGetLastError(); | |
std::cout << "Failed to close socket with error: " << rc << std::endl; | |
WSACleanup(); | |
return rc; | |
} | |
return 1; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment