Trouble with simple socket programming on the ps3

Technical discussion on the newly released and hard to find PS3.

Moderators: cheriff, emoon

Post Reply
Ashok Chandrashekar
Posts: 2
Joined: Thu Mar 01, 2007 9:05 pm

Trouble with simple socket programming on the ps3

Post by Ashok Chandrashekar »

Hi folks,
I am having some trouble with some extremely basic TCP socket programming.
My mock TCP server runs on ps3(YDL) and my client runs on WinXP.
I have statically configured ip addresses on both the machines. I am able to ping from one machine to the other.
However, in my trivial TCP socket programs, the client times out when it tries to connect to the server. I am unable to figure out why. I have even brought down the firewall on my windows machine. Is there any configuration I am missing? It works fine if both the client and server are on the ps3.
Could some one please take a quick look at my stripped down version of code(below) and give me a few pointers as to what I'm doing wrong?
Its a little embarassing , but I am stumped.
Best,
Ashok

Server code:
----------------
#include<sys/socket.h>
#include<stdio.h>
#include<sys/types.h>
#include<netinet/in.h>
#include <netdb.h>
#include<stdlib.h>
#include<unistd.h>
#include <string.h>

#define SERVER_TCP_PORT 7777


int SocketId;
int TempSockId;
int ClientSize;

struct sockaddr_in Server;
struct sockaddr_in Client;


int main()
{
//create server socket

if((SocketId=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
{
fprintf(stderr,"cant create a socket");
exit(1);
}
memset((char *)&Server,0, sizeof(struct sockaddr_in));


//initialize the server sockaddr_in structure members

Server.sin_family = AF_INET;
Server.sin_port = htons(SERVER_TCP_PORT);
Server.sin_addr.s_addr = inet_addr("11.11.11.2");
//bind the socket to the well known tcp port for the server
if(bind(SocketId,(struct sockaddr *)&Server,sizeof(Server))<0)
{
fprintf(stderr,"cant bind socket ");
exit(1);
}
printf("Server socket created and bound\n");
listen(SocketId,3); //the server buffers the incomming connection requests

ClientSize = sizeof(Client);
printf("Waiting for client\n");
//accept the connection and create a new temporary socket for the duratio of the cconnection
if((TempSockId = accept(SocketId,(struct sockaddr *)&Client,&ClientSize))<0)
{
fprintf(stderr,"cant accept client");
exit(1);
}
printf("Connection received\n");
close(SocketId);
close(TempSockId);
return 0;

}


Client code:
---------------
#include <assert.h>
#include <stdio.h>
#include <winsock2.h>
#include <iostream>

#define SERVER_TCP_PORT 7777
#define SOCKET_SUCCESS 0


int sd; // The socket descriptor where the server listens for new connections.
int client_len;
int new_sd; // The socket descriptor for the specific connection.;
struct sockaddr_in server; // The sockaddr_in structure for the server.
struct sockaddr_in client; // The sockaddr_in structure for the client.


int InitiateSockLibVersion(void)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 0 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
/* Tell the user that we could not find a usable */
printf(" ERROR: The requested DLL version not supported \n");
return SOCKET_ERROR;
}

/* Confirm that the WinSock DLL supports 2.0. */
/* Note that if the DLL supports versions greater */
/* than 2.0 in addition to 2.0, it will still return */
/* 2.0 in wVersion since that is the version we */
/* requested. */

if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 0 )
{
/* Tell the user that we could not find a usable */
printf(" ERROR: The requested DLL version not supported \n");
WSACleanup( );
return SOCKET_ERROR;
}
printf ("DEBUG:Successfully negotiated for Socket dll \n");
return SOCKET_SUCCESS;
}



int SetUpConnection()
{
int err = 0;

//create server socket
sd=socket(AF_INET ,SOCK_STREAM,IPPROTO_TCP);
if(-1 == sd)
{
err = WSAGetLastError();
fprintf(stderr,"ERROR:Cant create a socket, err number: %d\n", err);
return SOCKET_ERROR;
}
printf ("DEBUG:Socket created\n");

//initialize the server sockaddr_in structure members

server.sin_family = AF_INET;
server.sin_port = htons(SERVER_TCP_PORT);

// initialize the server structure member sin_addr
//using the address stored in the hostent structure

server.sin_addr.s_addr = inet_addr("11.11.11.2");

/* attempt to establish connection with the server*/
if(connect(sd,(struct sockaddr *)&(server),sizeof(struct sockaddr)) != 0)
{
printf("ERROR:Connection with server failed!\n");
return SOCKET_ERROR;
}

printf("DEBUG:Client connected to URBI server\n");
return SOCKET_SUCCESS;

}


void CloseConnection()
{
closesocket(sd);
WSACleanup( );
printf("DEBUG:Socket closed.\n");
}


int main (int argc, char* argv[])
{

// Setup TCP/IP Session
if (SOCKET_SUCCESS != InitiateSockLibVersion())
{
CloseConnection();
return SOCKET_ERROR;
}
if (SOCKET_SUCCESS != SetUpConnection())
{
CloseConnection();
return SOCKET_ERROR;
}
CloseConnection();
return SOCKET_SUCCESS;
}
Ashok Chandrashekar
Posts: 2
Joined: Thu Mar 01, 2007 9:05 pm

Post by Ashok Chandrashekar »

It was a problem with ip filters on linux. Its fixed now.
Post Reply