Results 1 to 1 of 1
Hi all,
I was working with sockets concept under linux, here is the code which i am using
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/socket.h>
#include ...
- 05-23-2009 #1Just Joined!
- Join Date
- Feb 2009
- Location
- Chennai, India
- Posts
- 28
Client-Server connection problem
Hi all,
I was working with sockets concept under linux, here is the code which i am using
When i try to run this code i am getting error while connecting to socketCode:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/ioctl.h> #define PORT 0x1234 #define PASS 0 #define FAIL 1 int main() { int listenfd,sendfd,acceptfd; struct sockaddr_in serveraddr,clientaddr; int retc; int accetfd; int servlen = sizeof(serveraddr); char *recv_buffer, *send_buffer; int i,j,k; int err_cnt = 0; int flag; int send_done; int bytes_to_send, bytes_to_read; int num_bytes_send, num_bytes_read; /* initialise all */ listenfd = sendfd = acceptfd = 0; recv_buffer = send_buffer = NULL; /* allocate buffer for both send and receive */ recv_buffer = (char *)malloc (1024 * 1024); if(recv_buffer == NULL) { printf("Can't allocate memory\n"); retc = FAIL; goto done; } send_buffer = (char *)calloc(1, 1024 * 1024); if(send_buffer == NULL) { printf("Can't allocate memory for send buffer\n"); retc = FAIL; goto done; } /* open socket for send and receive */ listenfd = socket(AF_INET, SOCK_STREAM, 0); if(listenfd < 0) { perror("listenfd socket failed"); retc = FAIL; goto done; } sendfd = socket(AF_INET, SOCK_STREAM, 0); if(sendfd < 0) { perror("sendfd socket failed"); retc = FAIL; goto done; } /* make both send and receive non-blocking */ if ( (flag = fcntl(listenfd, F_GETFL, NULL)) < 0) { perror("listenfd fcntl:"); retc = FAIL; goto done; } flag |= O_NONBLOCK; if ( fcntl(listenfd, F_SETFL, flag) < 0) { perror("listenfd fcntl:"); retc = FAIL; goto done; } if ( (flag = fcntl(sendfd, F_GETFL, NULL)) < 0) { perror("sendfd fcntl:"); perror("listenfd fcntl:"); retc = FAIL; } flag |= O_NONBLOCK; if ( fcntl(sendfd, F_SETFL, flag) < 0) { perror("sendfd fcntl:"); perror("listenfd fcntl:"); retc = FAIL; } /* Bind to socket */ serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = INADDR_ANY; serveraddr.sin_port = htons(PORT); clientaddr.sin_family = AF_INET; clientaddr.sin_addr.s_addr = INADDR_ANY; clientaddr.sin_port = htons(PORT); if (bind (listenfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) == -1) { perror("Bind error under listenfd"); retc = FAIL; goto done; } /* listen for incoming connection */ if (listen(listenfd, 1) == -1) { perror("Listen socket error"); retc = FAIL; goto done; } /* establisg connection */ if (connect(sendfd, (struct sockaddr *)&clientaddr,sizeof(struct sockaddr)) < 0) { perror("Connect call failed"); retc = FAIL; goto done; } /* accept incoming connection */ if (accept(listenfd, (struct sockaddr *)&serveraddr, &servlen) < 0) { perror("Accept call failed"); retc = FAIL; goto done; } retc = PASS; /* send and receive data */ for ( k = 0; k < 100; k++) { bytes_to_send = 1024 * 16; i = 0; j = 0; bytes_to_read = 1024 * 16; send_done = 0; while(1) { if ( send_done == 0) { num_bytes_send = send(sendfd, &send_buffer[j], bytes_to_send,0); if (num_bytes_send == -1) { perror("Sending data failed"); retc = FAIL; break; } else if (num_bytes_send == 0) { send_done = 1; } else { bytes_to_send -= num_bytes_send; j += num_bytes_send; } } if (retc == FAIL) break; num_bytes_read = read(acceptfd, &recv_buffer[i], bytes_to_read); if (num_bytes_read == -1) { perror("Receive data failed"); retc = FAIL; break; } else if (num_bytes_read == 0) { break; /* Break on EOF */ } else { bytes_to_read -= num_bytes_read; i += num_bytes_read; } } if ( retc == FAIL) break; for ( i = 0; i < 1024 * 16; i++) { if ( recv_buffer[i] != (char)i) { printf("Error: receive data not correct, \n"); printf("expected : 0x%x, received: 0x%x\n", i, recv_buffer[i]); retc = FAIL; err_cnt ++; if ( err_cnt > 10) break; } } if (retc != PASS) break; } done: if ( sendfd != 0 ) { if (close(sendfd ) < 0) perror( "close sendfd:"); } if ( acceptfd != 0 ) { if (close(acceptfd ) < 0) perror( "close accetfd:"); } if ( listenfd != 0) { if (close(listenfd) < 0) perror("close listen:"); } if ( send_buffer != NULL) free(send_buffer); if ( recv_buffer != NULL) free(recv_buffer); printf("Test......."); if(retc == PASS) printf("PASSED\n"); else printf("FAILED\n"); return retc; }
Connect call failed: Operation now in progress
Can anyone help..... Thanks in advance


Reply With Quote