/*
* Copyright (c) 2003-2005 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*/
#include "sm/generic.h"
SM_RCSID("@(#)$Id: st-net.c,v 1.5 2005/05/31 21:00:28 ca Exp $")
#include "sm/assert.h"
#include "sm/error.h"
#include "sm/memops.h"
#include "sm/fcntl.h"
#include "sm/net.h"
#include "statethreads/st.h"
#include "st-net.h"
void
net_st_socket_close(st_netfd_t sock)
{
st_netfd_close(sock);
}
st_netfd_t
net_st_client_connect(char *ip, int port, st_utime_t tmo)
{
st_netfd_t nfd;
int sockfd;
struct sockaddr_in servaddr;
ulong hostaddr;
SM_ASSERT(ip != NULL);
SM_ASSERT(port > 0);
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
return NULL;
sm_memset(&servaddr, '\0', sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(port);
if ((hostaddr = inet_addr(ip)) == INADDR_NONE)
return NULL;
sm_memcpy(&servaddr.sin_addr, &hostaddr, sizeof(hostaddr));
nfd = st_netfd_open_socket(sockfd);
if (nfd == NULL)
return NULL;
if (st_connect(nfd, (struct sockaddr *) &servaddr,
sizeof(servaddr), tmo) == -1)
return NULL;
return nfd;
}
#if 0
st_netfd_t
net_st_server_accept(st_netfd_t listenfd, struct sockaddr *addr, sockaddr_len_T *addrlen)
{
st_netfd_t connfd;
int sockopt;
SM_ASSERT(listenfd >= 0);
SM_ASSERT(addr != NULL);
SM_ASSERT(addrlen != NULL);
sockopt = 1;
connfd = st_accept(listenfd, (struct sockaddr *)addr, addrlen, -1);
if (connfd == NULL)
{
if (errno != EAGAIN)
return NULL;
}
else
{
#if 0
if (setsockopt(connfd, SOL_SOCKET, SO_KEEPALIVE,
(void *) &sockopt, sizeof(sockopt)) == -1)
return sm_err_perm(errno);
#endif /* 0 */
}
return connfd;
}
#endif /* 0 */
syntax highlighted by Code2HTML, v. 0.9.1