Calls to accept() cause a halt/crash

I have a simple test application that opens a TCP port, and then calls accept(). The problem is that EVERY time accept is called, the board halts/crashes. It appears to be in the tfSocketCheckAddrLenLock function, but I’m not 100% certain about that.

Here’s the stack output from the call stack:
6 tfAccept() …..\src reck\source\sockapi raccept.c:153 0x0001d044

Here’s the functions I’m using:
SOCKET create_new_socket()
{
SOCKET s;
struct sockaddr_in addr;
unsigned short port=502;
int ret;
s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == -1) {
return s;
}

//rc=setsocketoptions(&s);
//if(rc==-1)
//	goto newsock;

memset(&addr, 0, sizeof(addr));
addr.sin_family = PF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = INADDR_ANY;
ret = bind(s, (struct sockaddr *)&addr, sizeof(addr));
if (ret == -1) {
 	errno = getErrno();
   	closesocket(s);
   	s=-1;
}

if (listen(s, 5) == -1) {
  	closesocket(s);
  	s=-1;
}

return s;

}

SOCKET our_accept(SOCKET s)
{
struct sockaddr_in addr;
socklen_t addrlen;
static int connectioncount=0;
SOCKET newsock;

memset(&addr, 0, sizeof(addr));
addr.sin_family=PF_INET;
addrlen = sizeof(addr);
newsock= accept(s, (struct sockaddr *)&addr, (int*)&addrlen); //halts here!!!
if (newsock == -1) {
    return -1;
}

connectioncount++;
printf("The client connection from %s is accepted (# of connections=%d, available heap=%d)

",
inet_ntoa(addr.sin_addr),connectioncount,NATcpipGetCurrentHeapUsage());

return newsock;

}

Then I have a thread that calls “our_accept()”:
static void jobs_thread_func(ULONG arg)
{
static uint8_t query[260];
int rc=0;
SOCKET s=(SOCKET)arg;
SOCKET clisock;
struct sockaddr_in fromaddr;
int err;
socklen_t addrlen;

wait:
addrlen=sizeof(fromaddr);
clisock=our_accept(s);
if(clisock<0)
{
err=getErrno();
if(err==EWOULDBLOCK)
{
tx_thread_sleep(NS_MILLISECONDS_TO_TICKS(10));
goto wait;
}
}
while(1)
{
memset(&query[0],0x00,260);
rc = recv(clisock, (char*)query,260,0);
if(rc==0)
{
deadconn:
closesocket(clisock);
//addr.sin_addr.s_addr = INADDR_ANY;
printf("Opening a new TCP socket, heap usage is %d
",NATcpipGetCurrentHeapUsage());
goto wait;
}
if(rc<0)
{
if(rc==-ECONNRESET)
{
goto deadconn;

			}
			if(errno==0)
			{
				tx_thread_sleep(NS_MILLISECONDS_TO_TICKS(10));
				goto wait;
			}
			else
			{
				goto deadconn;
			}
		}
	}

}

int threadStartup(SOCKET s)
{
int ccode;
TX_THREAD jobs_thread = { 0 };
unsigned char *jobs_stack = NULL;

jobs_stack = malloc(8192);
		ccode = tx_thread_create(&amp;jobs_thread, "Jobs", jobs_thread_func, (ULONG)s,
				(void*) jobs_stack, 8192, APP_DEFAULT_API_PRIORITY,
				APP_DEFAULT_API_PRIORITY,1, TX_AUTO_START);
if (ccode != TX_SUCCESS) {
	printf("Unable to allocate Jobs thread stack.");
	return ccode;
}
return ccode;

}

And, finally:
void applicationStart (void)
{
SOCKET s;
/* Initialize the system services for the application. */
initAppServices();

/*

  • Code to start the user application goes here.
    */
    s=create_new_socket();
    threadStartup(s);
    printf ("Hello World. %s Ready
    ", APP_DIALOG_APP_NAME);
    tx_thread_suspend(tx_thread_identify());
    }

I’ve tried this outside of the thread, and the result is the same. I’ve created several projects from scratch thinking that I had an option wrong, but the results are the same.

Can someone tell me what might be wrong?

Thanks in advance.