| 385 | |
| 386 | |
| 387 | void ReceiveLog(DWORD processId) { |
| 388 | int debugPort = processId; |
| 389 | // 1024 - 65535 |
| 390 | while (debugPort > 0xffff) debugPort -= 0xffff; |
| 391 | while (debugPort < 0x400) debugPort += 0x400; |
| 392 | debugPort++; |
| 393 | |
| 394 | // 开始连接 debug session |
| 395 | // 开一个网络连接 |
| 396 | WORD version MAKEWORD(2, 2); |
| 397 | WSADATA data; |
| 398 | WSAStartup(version, &data); |
| 399 | |
| 400 | sockaddr_in serverAddress; |
| 401 | SOCKET hSocket = NULL; |
| 402 | |
| 403 | hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); |
| 404 | if (hSocket == INVALID_SOCKET) { |
| 405 | return; |
| 406 | } |
| 407 | |
| 408 | memset(&serverAddress, 0, sizeof(serverAddress)); |
| 409 | serverAddress.sin_family = AF_INET; |
| 410 | serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1"); |
| 411 | serverAddress.sin_port = htons((short) debugPort); |
| 412 | |
| 413 | if (SOCKET_ERROR == connect(hSocket, (sockaddr *) &serverAddress, sizeof(serverAddress))) { |
| 414 | closesocket(hSocket); |
| 415 | DWORD error = WSAGetLastError(); |
| 416 | printf("tcp connect error, err code=%d", error); |
| 417 | return; |
| 418 | } |
| 419 | |
| 420 | char receiveBuf[10240] = {0}; |
| 421 | |
| 422 | while (true) { |
| 423 | int receiveSize = ::recv(hSocket, receiveBuf, sizeof(receiveBuf), 0); |
| 424 | if (receiveSize <= 0) { |
| 425 | break; |
| 426 | } |
| 427 | |
| 428 | fwrite(receiveBuf, sizeof(char), receiveSize, stdout); |
| 429 | } |
| 430 | } |