74 lines
1.7 KiB
Plaintext
74 lines
1.7 KiB
Plaintext
#include "win/winsock2.bi"
|
|
|
|
Const PORT = 12345
|
|
|
|
Sub initialize_winsock()
|
|
Dim wsadata As WSADATA
|
|
If WSAStartup(&h0202, @wsadata) <> 0 Then
|
|
Print "WSAStartup failed"
|
|
End 1
|
|
End If
|
|
End Sub
|
|
|
|
Sub cleanup_winsock()
|
|
WSACleanup()
|
|
End Sub
|
|
|
|
Sub handle_client(client_socket As SOCKET)
|
|
Dim buffer As zstring * 1024
|
|
Dim bytes_received As Integer
|
|
Do
|
|
bytes_received = recv(client_socket, @buffer, Sizeof(buffer), 0)
|
|
If bytes_received <= 0 Then Exit Do
|
|
Print "Received: "; buffer
|
|
send(client_socket, @buffer, bytes_received, 0)
|
|
Loop
|
|
closesocket(client_socket)
|
|
End Sub
|
|
|
|
initialize_winsock()
|
|
|
|
Dim server_socket As SOCKET
|
|
server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
|
|
If server_socket = INVALID_SOCKET Then
|
|
Print "Socket creation failed"
|
|
cleanup_winsock()
|
|
End 1
|
|
End If
|
|
|
|
Dim server_addr As sockaddr_in
|
|
server_addr.sin_family = AF_INET
|
|
server_addr.sin_port = htons(PORT)
|
|
server_addr.sin_addr.S_addr = INADDR_ANY
|
|
|
|
If bind(server_socket, Cast(sockaddr Ptr, @server_addr), Sizeof(server_addr)) = SOCKET_ERROR Then
|
|
Print "Bind failed"
|
|
closesocket(server_socket)
|
|
cleanup_winsock()
|
|
End 1
|
|
End If
|
|
|
|
If listen(server_socket, SOMAXCONN) = SOCKET_ERROR Then
|
|
Print "Listen failed"
|
|
closesocket(server_socket)
|
|
cleanup_winsock()
|
|
End 1
|
|
End If
|
|
|
|
Print "Server listening on port "; PORT
|
|
|
|
Do
|
|
Dim client_socket As SOCKET
|
|
client_socket = accept(server_socket, NULL, NULL)
|
|
If client_socket = INVALID_SOCKET Then
|
|
Print "Accept failed"
|
|
closesocket(server_socket)
|
|
cleanup_winsock()
|
|
End 1
|
|
End If
|
|
handle_client(client_socket)
|
|
Loop
|
|
|
|
closesocket(server_socket)
|
|
cleanup_winsock()
|