File: INetSock.c

package info (click to toggle)
mlton 20100608-5.1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 36,628 kB
  • ctags: 70,047
  • sloc: ansic: 18,441; lisp: 2,879; makefile: 1,572; sh: 1,326; pascal: 256; asm: 97
file content (31 lines) | stat: -rw-r--r-- 969 bytes parent folder | download | duplicates (8)
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
#include "platform.h"

void 
Socket_INetSock_toAddr (Vector(Word8_t) in_addr, Word16_t port, 
                        Array(Word8_t) addr, Ref(C_Socklen_t) addrlen) {
  struct sockaddr_in *sa = (struct sockaddr_in*)addr;

  sa->sin_family = AF_INET;
  sa->sin_port = (uint16_t)port;
  sa->sin_addr = *(const struct in_addr*)in_addr;
  *((socklen_t*)addrlen) = sizeof(struct sockaddr_in);
}

static uint16_t Socket_INetSock_fromAddr_port;
static struct in_addr Socket_INetSock_fromAddr_in_addr;

void Socket_INetSock_fromAddr (Vector(Word8_t) addr) {
  const struct sockaddr_in *sa = (const struct sockaddr_in*)addr;

  assert(sa->sin_family == AF_INET);
  Socket_INetSock_fromAddr_port = sa->sin_port;
  Socket_INetSock_fromAddr_in_addr = sa->sin_addr;
}

Word16_t Socket_INetSock_getPort (void) {
  return (Word16_t)Socket_INetSock_fromAddr_port;
}

void Socket_INetSock_getInAddr (Array(Word8_t) addr) {
  *(struct in_addr*)addr = Socket_INetSock_fromAddr_in_addr;
}