|
| iMatix home page | << | < | > | >> |
SMTVersion 2.81 |
#include "smtsimu.h"
int
smtsimu_write_UDP (
sock_t handle, /* Socket handle */
void *buffer, /* Buffer containing data */
size_t length, /* Amount of data to write */
struct sockaddr_in *sin /* Address to send to, or null */
)
Replaces the normal write_UDP() function call. The data is sent, after a small but significant delay. Returns the length of the data packet. There is no guarantee that the packet will be sent and received successfully. Returns SOCKET_ERROR if there was an error, such as insufficient memory.
{
SOCKREQ *request; /* New socket transfer request */
dbyte req_size; /* Size of transfer request */
byte *msg_body; /* Event to send via delay timer */
int msg_size; /* Size of event body */
qbyte csecs = 100; /* Delay time in csecs */
/* Allocate a new transfer request */
req_size = sizeof (SOCKREQ) + length;
if ((request = mem_alloc (req_size)) == NULL)
{
sendfmt (&operq, "ERROR", "smtsimu: out of memory");
return ((int) SOCKET_ERROR);
}
request-> id = ++last_id;
request-> handle = handle;
request-> length = length;
request-> sin = *sin;
memcpy ((byte *) request + sizeof (SOCKREQ), buffer, length);
/* Calculate size required for message body */
msg_size = exdr_write (
NULL, /* No body - just get size */
SMT_TIME_ALARM, /* Format event for smttime */
0, csecs, /* Delay time */
req_size, request); /* Request info */
/* Now allocate and format the buffer */
msg_body = mem_alloc (msg_size);
msg_size = exdr_write (
msg_body, /* Event body */
SMT_TIME_ALARM, /* Format event for smttime */
0, csecs, /* Delay time */
req_size, request); /* Request info */
event send (
&timeq, /* Send to specified queue */
&simuq, /* No queue for reply */
"ALARM", /* Name of event to send */
msg_body, /* Event body contents */
msg_size, /* Event body size */
NULL, NULL, NULL, /* No response events */
0); /* No timeout */
mem_free (msg_body);
mem_free (request);
if (trace_flag)
sendfmt (&operq, "INFO",
"smtsimu: packet %u delayed by %u csecs", last_id, csecs);
return (length);
}
| | << | < | > | >> |
|