Thread: address out of bounds in sockets program

  1. #1
    Registered User
    Join Date
    Aug 2008

    address out of bounds in sockets program


    I'm working on a relatively simple program that is to allow two linux boxes to connect and send messages back and forth which will be processed at each end and made to play a i've done this sort of thing before and never had any trouble but this time i'm getting a Segmentation Fault and then an Address Out of Bounds error when I debug with gbd.

    I've been trying to fix this all morning and i've narrowed down the problem to the variable 'servIP' and specifically whilst i'm sorting the sockaddr structure. It seems to me like servIP is somehow having it's memory location changed. Naturally, an oob address caused a segfault which stops the program. However, my level of knowledge does not extend down to individual address spaces and why this is happening and I cant seem to find any clarification on any of the existing threads.

    #include <stdio.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    int loop;
    int hostSock;					/* Socket descript for host */
    int clntSock;					/* Socket descript for client */
    struct sockaddr_in hostAddr;	/* local address */
    struct sockaddr_in clntAddr;	/* client address */
    char *servIP;					/* target servers IP (for clnt) */
    char i;
    int main()
    i = 0;
    printf("Would you like to connect(C) to existing game, host(H) a game or see\n");
    printf("the rules(R)?\n");
    scanf("%s", &i);
    	 /* (clnt) connect to IP */
    	printf("Enter the target <Server IP>.\n");
    	scanf("%s", &servIP);
    	clntSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (clntSock < 0)
    		printf("Could not create socket.");
    	memset(&clntAddr, 0, sizeof(clntAddr));  			
    	clntAddr.sin_family = AF_INET;          			
    	clntAddr.sin_addr.s_addr = inet_addr(servIP);	
    /* in the above line I get the seg fault, and gnb states that the address space of servIP is oob */
    	clntAddr.sin_port = 9876;   					 		
    	if(connect(clntSock, (struct sockaddr*) &clntAddr, sizeof(clntAddr)) <0)
    		printf("Could not connect to server");
    Any ideas on how to solve this or even a nudge in the right direction would be greatly appreciated.

    Many Thanks.

  2. #2
    Join Date
    Dec 2007
    There are a few things wrong with this program. Here are a few quickies.

    scanf("%s", &i);
    scanf("%c", &i);
    You need to allocate memory for your char *servIP. That's the problem causing your seg fault. Try using
    char servIP[256];

    This line is continuously assigning 1 to the variable loop. Use == to compare.
    Same with the if (i='C') line.

  3. #3
    Hurry Slowly vart's Avatar
    Join Date
    Oct 2006
    Rishon LeZion, Israel
    Also you should fix your indentation and avoid using global vars
    All problems in computer science can be solved by another level of indirection,
    except for the problem of too many layers of indirection.
    David J. Wheeler

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Find program code's address at runtime
    By wakandan in forum C Programming
    Replies: 1
    Last Post: 07-01-2009, 11:26 AM
  2. IP Sockets Program in c++ for University Project
    By saqureshi in forum C++ Programming
    Replies: 3
    Last Post: 08-06-2008, 05:21 AM
  3. DX - CreateDevice - D3DERR_INVALIDCALL
    By Tonto in forum Game Programming
    Replies: 3
    Last Post: 12-01-2006, 07:17 PM
  4. Address program
    By Siggy in forum C++ Programming
    Replies: 3
    Last Post: 07-01-2004, 01:03 AM
  5. how to get memory address applied in other program?
    By wu7up in forum C Programming
    Replies: 1
    Last Post: 03-01-2003, 01:44 AM