This commit is contained in:
ge
2026-04-13 04:02:42 +03:00
parent 2d2281b8cc
commit 7b17a4a33b
9 changed files with 253 additions and 73 deletions
+42 -2
View File
@@ -14,8 +14,10 @@ fn C.shutdown(i32, i32) i32
fn C.close(i32) i32
fn C.setsockopt(i32, i32, i32, voidptr, i32) i32
fn C.getsockopt(i32, i32, i32, voidptr, voidptr) i32
struct C.sockaddr_storage {}
fn C.recv(i32, voidptr, usize, i32) i32
fn C.recvfrom(i32, voidptr, usize, i32, voidptr, i32) i32
fn C.send(i32, voidptr, usize, i32) i32
fn C.sendto(i32, voidptr, usize, i32, voidptr, i32) i32
pub struct Socket {
pub:
@@ -111,6 +113,44 @@ pub fn (s Socket) get_option_int(level SocketLevel, option SocketOption) !int {
return result
}
// receive a message from a connected socket.
pub fn (s Socket) recv(mut buf []u8, flags MsgFlag) !int {
r := C.recv(s.fd, buf.data, buf.len, flags)
if r == -1 {
return os.last_error()
}
return r
}
// receive a message from a connected socket.
pub fn (s Socket) recv_from(mut buf []u8, flags MsgFlag) !(int, SocketAddr) {
mut sock_addr_storage := &C.sockaddr_storage{}
mut sock_addr_len := sizeof(C.sockaddr_storage)
r := C.recvfrom(s.fd, buf.data, buf.len, flags, sock_addr_storage, sock_addr_len)
if r == -1 {
return os.last_error()
}
return r, unsafe { SocketAddr.from_ptr(sock_addr_storage, sock_addr_len)! }
}
// send a message on socket.
pub fn (s Socket) send(buf []u8, flags MsgFlag) !int {
r := C.send(s.fd, buf.data, buf.len, flags)
if r == -1 {
return os.last_error()
}
return r
}
// send a message on socket using the dst socket address as destination instead of the socket peer address.
pub fn (s Socket) send_to(buf []u8, dst SocketAddr, flags MsgFlag) !int {
r := C.sendto(s.fd, buf.data, buf.len, flags, dst.ptr(), dst.size())
if r == -1 {
return os.last_error()
}
return r
}
// shutdown shut downs socket send and receive operations.
pub fn (s Socket) shutdown(how Shutdown) ! {
if C.shutdown(s.fd, i32(how)) == -1 {