context->error = UDPC_SUCCESS;
context->error = thrd_create(
- &context->threadHandle, UDPC_INTERNAL_threadfn, &context);
+ &context->threadHandle, UDPC_INTERNAL_threadfn, context);
if(context->error != thrd_success)
{
CleanupSocket(context->socketHandle);
void UDPC_client_initiate_connection(UDPC_Context *ctx, uint32_t addr, uint16_t port)
{
+ if((ctx->flags & 0x1) != 0)
+ {
+ mtx_lock(&ctx->tCVMtx);
+ }
+
if((ctx->flags & 0x2) == 0 || UDPC_HashMap_has(ctx->conMap, addr) != 0)
{
// must be client or no already-existing connection to same address
cd.sent.tv_sec -= UDPC_INIT_PKT_INTERVAL + 1;
UDPC_HashMap_insert(ctx->conMap, addr, &cd);
+
+ if((ctx->flags & 0x1) != 0)
+ {
+ mtx_unlock(&ctx->tCVMtx);
+ }
}
int UDPC_queue_send(UDPC_Context *ctx, uint32_t addr, uint32_t isChecked, void *data, uint32_t size)
void printUsage()
{
- printf("Usage: [-c] -a <addr> -p <target_port> -l <listen_port>\n");
+ printf("Usage: [-c] [-t] -a <addr> -p <target_port> -l <listen_port>\n");
}
void conCallback(void *userdata, uint32_t addr)
int main(int argc, char** argv)
{
int isClient = 0;
+ int isThreaded = 0;
uint32_t targetAddress = 0;
uint16_t targetPort = 0;
uint16_t listenPort = 0;
{
isClient = 1;
}
+ else if(strcmp("-t", argv[0]) == 0)
+ {
+ isThreaded = 1;
+ }
else if(strcmp("-a", argv[0]) == 0 && argc > 1)
{
targetAddress = UDPC_strtoa(argv[1]);
--argc; ++argv;
}
- UDPC_Context *ctx = UDPC_init(listenPort, isClient);
+ UDPC_Context *ctx;
+ if(isThreaded == 0)
+ {
+ ctx = UDPC_init(listenPort, isClient);
+ }
+ else
+ {
+ ctx = UDPC_init_threaded_update(listenPort, isClient);
+ }
printf("isClient: %s, targetAddr: %s, targetPort: %u, listenPort: %u\n",
isClient == 0 ? "false" : "true",
{
UDPC_client_initiate_connection(ctx, targetAddress, targetPort);
}
- UDPC_update(ctx);
+ if(isThreaded == 0) { UDPC_update(ctx); }
UDPC_check_events(ctx);
thrd_sleep(&(struct timespec){0, 16666666}, NULL);
if(testCtx.hasConnectedOnce != 0 && testCtx.isConnected == 0)