cctools
|
UDP datagram communications. More...
Go to the source code of this file.
Macros | |
#define | DATAGRAM_ADDRESS_MAX 48 |
Maximum number of characters in a text formatted datagram address. More... | |
#define | DATAGRAM_PAYLOAD_MAX 65536 |
Maximum number of bytes in a datagram payload. More... | |
#define | DATAGRAM_PORT_ANY 0 |
Used to indicate any available port. More... | |
#define | DATAGRAM_ADDRESS_BROADCAST "255.255.255.255" |
The address to send to for broadcasting. More... | |
Functions | |
struct datagram * | datagram_create (int port) |
Create a new port for sending or receiving datagrams. More... | |
struct datagram * | datagram_create_address (const char *address, int port) |
Create a new address/port for sending or receiving datagrams. More... | |
void | datagram_delete (struct datagram *d) |
Destroy a datagram port. More... | |
int | datagram_recv (struct datagram *d, char *data, int length, char *addr, int *port, int timeout) |
Receive a datagram. More... | |
int | datagram_send (struct datagram *d, const char *data, int length, const char *addr, int port) |
Send a datagram. More... | |
int | datagram_fd (struct datagram *d) |
Obtain the file descriptor of a datagram object. More... | |
UDP datagram communications.
This module implements datagram communications using UDP. A datagram is a small, fixed size message send to a given host and port, which is not guaranteed to arrive.
This module is arguably misnamed: A struct datagram
does not represent a datagram, but rather an open port that can be used to send datagrams with datagram_send.
Example sender:
include "datagram.h" include "debug.h"
const char *message = "hello world!"; const char *address = "192.168.2.1"; int port = 40000;
d = datagram_create(DATAGRAM_PORT_ANY); if(!d) fatal("couldn't create datagram port");
datagram_send(d,message,strlen(message),address,port);
And an example receiver:
include "datagram.h" include "debug.h"
char message[DATAGRAM_PAYLOAD_MAX]; char address[DATAGRAM_ADDRESS_MAX]; int port = 40000;
d = datagram_create(port); if(!d) fatal("couldn't create datagram port");
length = datagram_recv(d,message,sizeof(message),&address,&port,10000000); if(length>0) { message[length] = 0; printf("got message: %s\n",message); } else { printf("no message received.\n"); }
#define DATAGRAM_ADDRESS_MAX 48 |
Maximum number of characters in a text formatted datagram address.
#define DATAGRAM_PAYLOAD_MAX 65536 |
Maximum number of bytes in a datagram payload.
#define DATAGRAM_PORT_ANY 0 |
Used to indicate any available port.
#define DATAGRAM_ADDRESS_BROADCAST "255.255.255.255" |
The address to send to for broadcasting.
struct datagram* datagram_create | ( | int | port | ) |
Create a new port for sending or receiving datagrams.
port | The UDP port number to bind to. On most versions of Unix, an ordinary user can only bind to ports greater than 1024. |
struct datagram* datagram_create_address | ( | const char * | address, |
int | port | ||
) |
Create a new address/port for sending or receiving datagrams.
address | The IP address to listen on. |
port | The UDP port number to bind to. On most versions of Unix, an ordinary user can only bind to ports greater than 1024. |
void datagram_delete | ( | struct datagram * | d | ) |
Destroy a datagram port.
d | The datagram object to destroy. |
int datagram_recv | ( | struct datagram * | d, |
char * | data, | ||
int | length, | ||
char * | addr, | ||
int * | port, | ||
int | timeout | ||
) |
Receive a datagram.
d | The datagram object. |
data | Where to store the received message. |
length | The length of the buffer, typically DATAGRAM_PAYLOAD_MAX. |
addr | Pointer to a string of at least DATAGRAM_ADDRESS_MAX characters, which will be filled in with the IP address of the sender. |
port | Pointer to an integer which will be filled in with the port number of the sender. |
timeout | Maximum time to wait, in microseconds. |
int datagram_send | ( | struct datagram * | d, |
const char * | data, | ||
int | length, | ||
const char * | addr, | ||
int | port | ||
) |
Send a datagram.
d | The datagram object. |
data | The data to send. |
length | The length of the datagram. |
addr | The address of the recipient. |
port | The port of the recipient. |
int datagram_fd | ( | struct datagram * | d | ) |
Obtain the file descriptor of a datagram object.
d | The datagram object. |