Hi,
I’m trying trun tcpserver code for DC-ME-NET dev. kit.
Accept command returns error always (first error code:11, and at the next tries returns error code:9)
The code below, how can i establish the tcp connection?
//-----------------------------------------------
void modbustcpServer(unsigned long thread_input)
{
long sock, fd; /* socket descriptor /
struct sockaddr_in serverSocket, clientSocket; / Internet endpoint address */
int result, szserverSocket, szclientSocket;
int block=1;
char rcvData[RCV_BUFFER_SIZE];
//char sendData[250];
unsigned int CNT = 0;
unsigned int old_priority;
signed int err;
//open the TCP socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
printf("MODBUSTCP: socket failure: errno: %d
", getErrno());
closesocket(sock);
return;
}
//Set Socket Option
result = setsockopt(sock, SOL_SOCKET, SO_NONBLOCK, (char *)&block, sizeof(block));
if (result < 0)
{
printf("MODBUSTCP: setsockopt SO_NONBLOCK failure: errno: %d
", getErrno());
closesocket(sock);
return;
}
//bind SERVER socket to PortNumber, any IP
memset((void *)&serverSocket, 0, sizeof(serverSocket));
serverSocket.sin_family = AF_INET;
serverSocket.sin_addr.s_addr = htonl(INADDR_ANY); // client address
serverSocket.sin_port = htons(PortNumber);
#ifdef IAM_ENABLED
result=bind(sock, (struct sockaddr *)&serverSocket, sizeof(serverSocket));
#else
result=bind(sock, &serverSocket, sizeof(serverSocket));
#endif
if(result<0)
{
printf("MODBUSTCP: bind failure: errno: %d
", getErrno());
closesocket(sock);
return;
}
// set up server socket to receive a connection backlog determines max length of queue for pending client connections
result = listen(sock, listenBacklog);
if(result<0)
{
// close socket and return indicating failure
printf("MODBUSTCP: listen failure: errno: %d
", getErrno());
closesocket(sock);
return;
}
#ifdef DEBUG
printf("MODBUSTCP: ready on port: %d
", PortNumber);
#endif
do
{
// accept client connection request
szclientSocket = sizeof (clientSocket);
#ifdef IAM_ENABLED
fd=accept(sock, (struct sockaddr *)&clientSocket, &szclientSocket);
#else
fd=accept(sock, &clientSocket, &szclientSocket);
#endif
if(fd<0)
{
err=getErrno();
printf("MODBUSTCP: accept failure: errno: %d
", err/getErrno()/);
closesocket(sock);
continue; //return;
}
result = recv(fd, rcvData, RCV_BUFFER_SIZE, 0);
if (result < 0)
{
printf("MODBUSTCP: recv(%d,,%d) failed: %d
", (int)sock, RCV_BUFFER_SIZE, getErrno());
closesocket(sock);
continue;
}
++CNT;
printf("MODBUSTCP: CNT %d, received[%d] TCP '%c' command.
", CNT, result, rcvData[0]);
/* transmit command */
switch (rcvData[0])
{
case 'T':
tx_thread_priority_change(tx_thread_identify(), 4, &old_priority);
transmit_segments(fd, rcvData);
tx_thread_priority_change(tx_thread_identify(), old_priority, &old_priority);
break;
case 'R':
receive_segments(fd, result);
break;
case 'E':
case 'X':
case 'N':
break;
default:
if (result<20)
{
rcvData[result] = 0;
printf("MODBUSTCP: TCP data was '%d %d %d'
", rcvData[0], rcvData[1], rcvData[2]);
}
}
} while(1);
}
//------------------------------------------------