mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-31 09:42:27 +00:00
Fix some more socket bugs
- The functions that return a sockaddr now do so the same way the Linux Kernel does across platforms, e.g. getpeername(), accept4() - Socket system calls on Windows will now only check for interrupts when a blocking operation needs to be performed. - Write tests for recvfrom() system call
This commit is contained in:
parent
ac92f25296
commit
0ba3199915
49 changed files with 347 additions and 352 deletions
|
@ -20,6 +20,7 @@
|
|||
#include "libc/sock/sock.h"
|
||||
#include "libc/sock/struct/sockaddr.h"
|
||||
#include "libc/sock/struct/sockaddr6.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/sysv/consts/af.h"
|
||||
#include "libc/sysv/consts/ipproto.h"
|
||||
#include "libc/sysv/consts/limits.h"
|
||||
|
@ -91,3 +92,29 @@ TEST(ipv6, test) {
|
|||
ASSERT_TRUE(WIFEXITED(ws));
|
||||
ASSERT_EQ(0, WEXITSTATUS(ws));
|
||||
}
|
||||
|
||||
TEST(getsockname, defaultsToZero) {
|
||||
struct sockaddr_in addr;
|
||||
uint32_t addrsize = sizeof(struct sockaddr_in);
|
||||
memset(&addr, -1, sizeof(addr));
|
||||
ASSERT_SYS(0, 3, socket(AF_INET, SOCK_STREAM, IPPROTO_TCP));
|
||||
ASSERT_SYS(0, 0, getsockname(3, (struct sockaddr *)&addr, &addrsize));
|
||||
ASSERT_EQ(sizeof(struct sockaddr_in), addrsize);
|
||||
ASSERT_EQ(AF_INET, addr.sin_family);
|
||||
ASSERT_EQ(0, addr.sin_addr.s_addr);
|
||||
ASSERT_EQ(0, addr.sin_port);
|
||||
EXPECT_SYS(0, 0, close(3));
|
||||
}
|
||||
|
||||
TEST(getsockname, copiesSafely_givesFullSize) {
|
||||
struct sockaddr_in addr;
|
||||
uint32_t addrsize = 2;
|
||||
memset(&addr, -1, sizeof(addr));
|
||||
ASSERT_SYS(0, 3, socket(AF_INET, SOCK_STREAM, IPPROTO_TCP));
|
||||
ASSERT_SYS(0, 0, getsockname(3, (struct sockaddr *)&addr, &addrsize));
|
||||
ASSERT_EQ(sizeof(struct sockaddr_in), addrsize);
|
||||
ASSERT_EQ(AF_INET, addr.sin_family);
|
||||
ASSERT_EQ(0xffffffff, addr.sin_addr.s_addr);
|
||||
ASSERT_EQ(0xffff, addr.sin_port);
|
||||
EXPECT_SYS(0, 0, close(3));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue