mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-20 15:09:42 +00:00
LibCore: Implement TCPServer on Windows
This commit is contained in:
parent
9d7971c111
commit
cc3cabc768
Notes:
github-actions[bot]
2025-08-07 02:26:27 +00:00
Author: https://github.com/ayeteadoe
Commit: cc3cabc768
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5435
Reviewed-by: https://github.com/ADKaster ✅
Reviewed-by: https://github.com/R-Goc
5 changed files with 174 additions and 6 deletions
|
@ -5,6 +5,7 @@
|
|||
* Copyright (c) 2022, Matthias Zimmerman <matthias291999@gmail.com>
|
||||
* Copyright (c) 2023, Cameron Youell <cameronyouell@gmail.com>
|
||||
* Copyright (c) 2024-2025, stasoid <stasoid@yahoo.com>
|
||||
* Copyright (c) 2025, ayeteadoe <ayeteadoe@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -109,10 +110,15 @@ ErrorOr<struct stat> fstat(int handle)
|
|||
return st;
|
||||
}
|
||||
|
||||
ErrorOr<void> ioctl(int, unsigned, ...)
|
||||
ErrorOr<void> ioctl(int fd, unsigned request, ...)
|
||||
{
|
||||
dbgln("Core::System::ioctl() is not implemented");
|
||||
VERIFY_NOT_REACHED();
|
||||
va_list ap;
|
||||
va_start(ap, request);
|
||||
u_long arg = va_arg(ap, FlatPtr);
|
||||
va_end(ap);
|
||||
if (::ioctlsocket(fd, request, &arg) == SOCKET_ERROR)
|
||||
return Error::from_windows_error();
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<ByteString> getcwd()
|
||||
|
@ -242,6 +248,42 @@ bool is_socket(int handle)
|
|||
return GetFileType(to_handle(handle)) == FILE_TYPE_PIPE;
|
||||
}
|
||||
|
||||
ErrorOr<void> bind(int sockfd, struct sockaddr const* name, socklen_t name_size)
|
||||
{
|
||||
if (::bind(sockfd, name, name_size) == SOCKET_ERROR)
|
||||
return Error::from_windows_error();
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<void> listen(int sockfd, int backlog)
|
||||
{
|
||||
if (::listen(sockfd, backlog) == SOCKET_ERROR)
|
||||
return Error::from_windows_error();
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<int> accept(int sockfd, struct sockaddr* addr, socklen_t* addr_size)
|
||||
{
|
||||
auto fd = ::accept(sockfd, addr, addr_size);
|
||||
if (fd == INVALID_SOCKET)
|
||||
return Error::from_windows_error();
|
||||
return fd;
|
||||
}
|
||||
|
||||
ErrorOr<void> getsockname(int sockfd, struct sockaddr* name, socklen_t* name_size)
|
||||
{
|
||||
if (::getsockname(sockfd, name, name_size) == SOCKET_ERROR)
|
||||
return Error::from_windows_error();
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<void> setsockopt(int sockfd, int level, int option, void const* value, socklen_t value_size)
|
||||
{
|
||||
if (::setsockopt(sockfd, level, option, static_cast<char const*>(value), value_size) == SOCKET_ERROR)
|
||||
return Error::from_windows_error();
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<void> socketpair(int domain, int type, int protocol, int sv[2])
|
||||
{
|
||||
if (domain != AF_LOCAL || type != SOCK_STREAM || protocol != 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue