| iMatix home page | << | < | > | >> |
SMT Version 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); }
| << | < | > | >> | Copyright © 1996-99 iMatix Corporation |