public
Description: Vim plugin for debugging Ruby applications (using ruby-debug-ide gem)
Homepage:
Clone URL: git://github.com/astashov/vim-ruby-debugger.git
Anton Astashov (author)
Thu Nov 05 19:51:02 -0800 2009
vim-ruby-debugger / winsock.c
100644 77 lines (60 sloc) 1.679 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <errno.h> /* perror() and errno */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <winsock.h>
#include <windows.h>
 
extern int errno;
 
int main(int argc, char **argv) {
 
  WSADATA wsa_data;
  if (WSAStartup(MAKEWORD(2, 0), &wsa_data) != 0) {
    fprintf(stderr, "WSAStartup() failed\n");
    return EXIT_FAILURE;
  }
 
  if(argc != 4) {
    fprintf(stderr, "Wrong number of arguments: %d instead of 3\n", argc - 1);
    return EXIT_FAILURE;
  }
 
  struct protoent *protocol;
  protocol = getprotobyname("tcp");
  if(!protocol) {
    perror("getprotobyname()");
    return(errno);
  }
 
  int sd; /* our socket descriptor */
  sd = socket(PF_INET, SOCK_STREAM, protocol->p_proto);
  if(!sd) {
    perror("socket()");
    return(errno);
  }
 
  struct sockaddr_in socketaddr;
  memset(&socketaddr, 0, sizeof(socketaddr)); /* initialize it */
  socketaddr.sin_family = AF_INET; /* set the family type to Internet */
  socketaddr.sin_port = htons(atoi(argv[2]));
 
  struct hostent *hostaddr;
  hostaddr = gethostbyname(argv[1]);
  if(!hostaddr) {
    fprintf(stderr, "gethostbyname() failed\n");
    return EXIT_FAILURE;
  }
  memcpy(&socketaddr.sin_addr, hostaddr->h_addr, hostaddr->h_length);
 
  int rval;
  int attempts = 0;
  do {
    rval = connect(sd, (struct sockaddr *) &socketaddr, sizeof(socketaddr));
    attempts += 1;
    Sleep(500);
  } while (rval == -1 && attempts < 50);
    
  if (rval == -1) {
    perror("connect()");
    return(errno);
  }
 
  rval = send(sd, argv[3], strlen(argv[3]), 0);
  if (rval != strlen(argv[3])) {
    perror("send()");
    return(errno);
  }
 
 
  //WSACleanup();
  closesocket(sd);
  return EXIT_SUCCESS;
 
}