2 * <sys/socket.h> wrapper functions.
5 * Steffen Kiess (s-kiess@web.de)
7 * Copyright (C) 2015 Steffen Kiess
10 #include <sys/socket.h>
12 #include <netinet/in.h>
23 Mono_Posix_Syscall_socketpair (int domain
, int type
, int protocol
, int* socket1
, int* socket2
)
25 int filedes
[2] = {-1, -1};
28 r
= socketpair (domain
, type
, protocol
, filedes
);
30 *socket1
= filedes
[0];
31 *socket2
= filedes
[1];
36 Mono_Posix_Syscall_getsockopt (int socket
, int level
, int option_name
, void* option_value
, gint64
* option_len
)
41 mph_return_if_socklen_t_overflow (*option_len
);
45 r
= getsockopt (socket
, level
, option_name
, option_value
, &len
);
53 Mono_Posix_Syscall_getsockopt_timeval (int socket
, int level
, int option_name
, struct Mono_Posix_Timeval
* option_value
)
59 size
= sizeof (struct timeval
);
60 r
= getsockopt (socket
, level
, option_name
, &tv
, &size
);
62 if (r
!= -1 && size
== sizeof (struct timeval
)) {
63 if (Mono_Posix_ToTimeval (&tv
, option_value
) != 0)
66 memset (option_value
, 0, sizeof (struct Mono_Posix_Timeval
));
75 Mono_Posix_Syscall_getsockopt_linger (int socket
, int level
, int option_name
, struct Mono_Posix_Linger
* option_value
)
81 size
= sizeof (struct linger
);
82 r
= getsockopt (socket
, level
, option_name
, &ling
, &size
);
84 if (r
!= -1 && size
== sizeof (struct linger
)) {
85 if (Mono_Posix_ToLinger (&ling
, option_value
) != 0)
88 memset (option_value
, 0, sizeof (struct Mono_Posix_Linger
));
97 Mono_Posix_Syscall_setsockopt (int socket
, int level
, int option_name
, void* option_value
, gint64 option_len
)
99 mph_return_if_socklen_t_overflow (option_len
);
101 return setsockopt (socket
, level
, option_name
, option_value
, option_len
);
105 Mono_Posix_Syscall_setsockopt_timeval (int socket
, int level
, int option_name
, struct Mono_Posix_Timeval
* option_value
)
109 if (Mono_Posix_FromTimeval (option_value
, &tv
) != 0)
112 return setsockopt (socket
, level
, option_name
, &tv
, sizeof (struct timeval
));
116 Mono_Posix_Syscall_setsockopt_linger (int socket
, int level
, int option_name
, struct Mono_Posix_Linger
* option_value
)
120 if (Mono_Posix_FromLinger (option_value
, &ling
) != 0)
123 return setsockopt (socket
, level
, option_name
, &ling
, sizeof (struct linger
));
127 Mono_Posix_Syscall_recv (int socket
, void* message
, guint64 length
, int flags
)
129 mph_return_if_size_t_overflow (length
);
131 return recv (socket
, message
, length
, flags
);
135 Mono_Posix_Syscall_send (int socket
, void* message
, guint64 length
, int flags
)
137 mph_return_if_size_t_overflow (length
);
139 return send (socket
, message
, length
, flags
);