Banjo API 1.0.0-rc.2
Low-level C99 game development API
Loading...
Searching...
No Matches
net_tcp_server.c
Go to the documentation of this file.
1
9
10#include <banjo/log.h>
11#include <banjo/main.h>
12#include <banjo/net.h>
13#include <banjo/system.h>
14
15#include <limits.h>
16#include <stdio.h>
17
18int main(int argc, char* argv[]) {
19 (void)argc;
20 (void)argv;
21
22 if (!bj_begin(BJ_NETWORK_SYSTEM, 0)) {
23 return -1;
24 }
25
26 struct bj_error* error = 0;
27 struct bj_tcp_listener* listener = bj_listen_tcp(0, 8081, 0, 0, &error);
28 if(!listener) {
29 bj_err("client: bind failed (%s)", bj_error_message(error));
30 bj_clear_error(&error);
31 return 1;
32 }
33 bj_info("server: listening on port %d", bj_tcp_listener_port(listener));
34
35 bj_info("server: waiting for client...");
36 struct bj_tcp_stream* stream = bj_accept_tcp(listener, UINT32_MAX, &error);
37 if(stream) {
38 bj_info("server: client connected");
39
40 char name[256];
41 int n = bj_tcp_recv(stream, name, sizeof(name) - 1);
42 if(n > 0) {
43 name[n] = '\0';
44 bj_info("server: received name: %s", name);
45
46 char response[512];
47 int len = snprintf(response, sizeof(response), "Hello %s", name);
48 bj_tcp_send(stream, response, len);
49 bj_info("server: sent greeting");
50 }
51
52 bj_close_tcp_stream(stream);
53 bj_info("server: connection closed");
54 }
55
56 bj_close_tcp_listener(listener);
57
58 bj_end();
59
60 return 0;
61}
int main(int argc, char *argv[])
Definition audio_pcm.c:177
struct bj_error bj_error
Definition api.h:333
struct bj_tcp_listener bj_tcp_listener
Definition api.h:356
struct bj_tcp_stream bj_tcp_stream
Definition api.h:357
const char * bj_error_message(const struct bj_error *error)
Gets the error message from an error object.
void bj_clear_error(struct bj_error **error)
Frees an error and sets the pointer to NULL.
#define bj_info(...)
Log a message using the BJ_LOG_INFO level.
Definition log.h:141
#define bj_err(...)
Log a message using the BJ_LOG_ERROR level.
Definition log.h:169
uint16_t bj_tcp_listener_port(const struct bj_tcp_listener *listener)
Get the listening port of the given server.
int bj_tcp_recv(struct bj_tcp_stream *stream, void *buf, size_t len)
Receives data from a TCP stream.
void bj_close_tcp_stream(struct bj_tcp_stream *stream)
Closes a TCP stream and releases associated resources.
struct bj_tcp_stream * bj_accept_tcp(struct bj_tcp_listener *listener, uint32_t ms_timeout, struct bj_error **error)
Accepts an incoming connection on a TCP listener with timeout.
void bj_close_tcp_listener(struct bj_tcp_listener *listener)
Closes a TCP listener and releases associated resources.
int bj_tcp_send(struct bj_tcp_stream *stream, const void *buf, size_t len)
Sends data over a TCP stream.
struct bj_tcp_listener * bj_listen_tcp(const char *host, uint16_t port, uint16_t hint, int backlog, struct bj_error **error)
Creates a TCP listener bound to the specified host and port.
bj_bool bj_begin(int systems, struct bj_error **error)
Initialises the system.
void bj_end(void)
De-initialises the system.
@ BJ_NETWORK_SYSTEM
Definition system.h:82
Logging utility functions.
Portable main() replacement with platform-aware entry shim.
Header file for network API.
Header file for system interactions.