Example #1
0
SOCKET TcpConnect (LPCSTR szHost,
                   LPCSTR szService, 
                   unsigned short nPort)
{
int                   Rc;
struct sockaddr_in    saSockAddr;
struct servent     *  lpServEnt;
SOCKET                connect_skt;

  /* --- 1er champ de saSockAddr : Port */
  lpServEnt = (szService==NULL) ?  NULL :  getservbyname (szService, "tcp") ;  
  saSockAddr.sin_port = lpServEnt!=NULL ?   lpServEnt->s_port : htons(nPort);
  /* --- 2eme champ de saSockAddr : Addresse serveur */
  saSockAddr.sin_addr = Tcp4uGetIPAddr (szHost);
  if (saSockAddr.sin_addr.s_addr==INADDR_NONE)   return INVALID_SOCKET;
  /* --- Dernier champ : liaison connectie */
  saSockAddr.sin_family      = AF_INET; /* on utilise le mode connecte TCP */
  /* --- creation de la socket */
  if ( (connect_skt = socket (PF_INET, SOCK_STREAM, 0))==SOCKET_ERROR)
       return  SOCKET_ERROR;
  /* --- connect retourne INVALID_SOCKET ou numero valide */
  Rc = connect (connect_skt,(struct sockaddr *) & saSockAddr, sizeof saSockAddr);
  /* --- enregistrement dans notre table */
return Rc==0 ? connect_skt : SOCKET_ERROR;
}  /* TcpConnect */
Example #2
0
/* ------------------------------------------------------------------------- */
int API4U UdpInit (LPUDPSOCK far *pUdp, LPCSTR szHost, 
                   unsigned short uRemotePort, unsigned short uLocalPort)
{
int                   Rc;
SOCKET                UdpSock = INVALID_SOCKET;
struct  sockaddr_in   saSendAddr; /* structure identifiant le destinataire */
struct  sockaddr_in   saBindAddr; /* structure limitant les clients        */

  Tcp4uLog (LOG4U_PROC, "UdpInit, host %s", szHost);

  memset (& saBindAddr, 0, sizeof saBindAddr);
  memset (& saSendAddr, 0, sizeof saSendAddr); 
  /* --- 1. calcul de saSendAddr : RemoteService et szHost */
  saSendAddr.sin_family = AF_INET;
  saSendAddr.sin_port = htons (uRemotePort) ;
  if (szHost!=NULL)
  {
    saSendAddr.sin_addr = Tcp4uGetIPAddr (szHost);
    if (saSendAddr.sin_addr.s_addr==INADDR_NONE)   
    {
	     Tcp4uLog (LOG4U_ERROR, "UdpInit: host Unknown");
     	 return TCP4U_HOSTUNKNOWN;
    }
  } /* szHost is specified */
 
  /* --- autres champs de saBindAddr             */
  saBindAddr.sin_port = htons (uLocalPort);
  saBindAddr.sin_family = AF_INET;
  saBindAddr.sin_addr.s_addr = INADDR_ANY;

  /* --- Allocation de la socket */
  Tcp4uLog (LOG4U_CALL, "socket PF_INET SOCK_DGRAM");
  UdpSock = socket (PF_INET, SOCK_DGRAM, 0);
  if (UdpSock<0) 
  {
     Tcp4uLog (LOG4U_ERROR, "socket PF_INET SOCK_DGRAM");
     return TCP4U_NOMORESOCKET;
  }

  /* --- do a bind, thus all packets to be received will come on given port */
  Tcp4uLog (LOG4U_CALL, "bind to %s", inet_ntoa (saBindAddr.sin_addr));
  Rc = bind (UdpSock, (struct sockaddr far *) & saBindAddr, 
             sizeof(struct sockaddr));
  if (Rc<0)   
  { 
     Tcp4uLog (LOG4U_ERROR, "bind to %s", inet_ntoa (saBindAddr.sin_addr));
     CloseSocket (UdpSock);  
     return TCP4U_BINDERROR; 
  }

  /* --- Allocation de la structure */
  *pUdp = Calloc (sizeof (UDPSOCK), 1);
  if (*pUdp==NULL)  { CloseSocket (UdpSock);  return TCP4U_INSMEMORY; }
  (*pUdp)->UdpSock = UdpSock;
  (*pUdp)->saSendAddr = saSendAddr; 
  (*pUdp)->bSemiConnected = FALSE;  /* can receive data from any host */

   Tcp4uLog (LOG4U_EXIT, "UdpInit");
return TCP4U_SUCCESS;
} /* UdpInit */