Ticket #5374: gsa.c

File gsa.c, 1.1 KB (added by nickm, 8 years ago)
Line 
1
2#include <winsock2.h>
3#include <windows.h>
4#include <string.h>
5#include <stdio.h>
6
7int main(int argc, char **argv)
8{
9        SOCKET s;
10        WSADATA WSAData;
11        struct sockaddr_in sin;
12        unsigned long one = 1;
13        int socklen = sizeof(sin);
14        int blocking = argc > 1;
15
16        WSAStartup(0x101, &WSAData);
17
18        memset(&sin, 0, sizeof(&sin));
19
20        sin.sin_family = AF_INET;
21        sin.sin_port = htons(80);
22        sin.sin_addr.s_addr = htonl(0x563b1e24); /* www.torproject.org -- I promise */
23
24        s = socket(AF_INET, SOCK_STREAM, 0);
25
26        if (!blocking)
27                ioctlsocket(s, FIONBIO, &one);
28
29        if (connect(s, (struct sockaddr*) &sin, sizeof(sin))<0) {
30                int e = WSAGetLastError();
31                if (e != WSAEWOULDBLOCK && e != WSAEINVAL && e != WSAEINPROGRESS) {
32                        printf("Actual error from connect: %d\n", e);
33                        return 0;
34                }
35        }
36        puts("connect done");
37
38        if (getsockname(s, (struct sockaddr*) &sin, &socklen) != 0) {
39                int e = WSAGetLastError();
40                printf("Error from getsockname: %d\n", e);
41                return 0;
42        }
43
44
45        printf("getsockname() was happy. My address was 0x%x\n",
46               (unsigned) ntohl(sin.sin_addr.s_addr));
47
48        closesocket(s);
49        return 0;
50}