-
+#include <errno.h>
#include "shared.h"
#include "os_net.h"
+ strlen ((ptr)->sun_path))
#endif /* Sun_LEN */
-#else
-int ENOBUFS = 0;
+#else /* WIN32 */
+/*int ENOBUFS = 0;*/
+# ifndef ENOBUFS
+# define ENOBUFS 0
+# endif
+
#endif /* WIN32*/
if(setsockopt(ossock, SOL_SOCKET, SO_REUSEADDR,
(char *)&flag, sizeof(flag)) < 0)
{
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
}
}
if(bind(ossock, (struct sockaddr *) &server6, sizeof(server6)) < 0)
{
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
}
#endif
if(bind(ossock, (struct sockaddr *) &server, sizeof(server)) < 0)
{
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
}
}
{
if(listen(ossock, 32) < 0)
{
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
}
}
n_us.sun_family = AF_UNIX;
strncpy(n_us.sun_path, path, sizeof(n_us.sun_path)-1);
- if((ossock = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
+ if((ossock = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0)
return(OS_SOCKTERR);
if(bind(ossock, (struct sockaddr *)&n_us, SUN_LEN(&n_us)) < 0)
{
- close(ossock);
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
}
/* Changing permissions */
- chmod(path,mode);
+ if(chmod(path,mode) < 0)
+ {
+ OS_CloseSocket(ossock);
+ return(OS_SOCKTERR);
+ }
/* Getting current maximum size */
if(getsockopt(ossock, SOL_SOCKET, SO_RCVBUF, &len, &optlen) == -1)
+ {
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
+ }
/* Setting socket opt */
if(len < max_msg_size)
{
len = max_msg_size;
- setsockopt(ossock, SOL_SOCKET, SO_RCVBUF, &len, optlen);
+ if(setsockopt(ossock, SOL_SOCKET, SO_RCVBUF, &len, optlen) < 0)
+ {
+ OS_CloseSocket(ossock);
+ return(OS_SOCKTERR);
+ }
}
return(ossock);
n_us.sun_family = AF_UNIX;
/* Setting up path */
- strncpy(n_us.sun_path,path,sizeof(n_us.sun_path)-1);
+ strncpy(n_us.sun_path,path,sizeof(n_us.sun_path)-1);
- if((ossock = socket(AF_UNIX, SOCK_DGRAM,0)) < 0)
+ if((ossock = socket(PF_UNIX, SOCK_DGRAM,0)) < 0)
return(OS_SOCKTERR);
* We can use "send" after that
*/
if(connect(ossock,(struct sockaddr *)&n_us,SUN_LEN(&n_us)) < 0)
+ {
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
+ }
/* Getting current maximum size */
if(getsockopt(ossock, SOL_SOCKET, SO_SNDBUF, &len, &optlen) == -1)
+ {
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
+ }
/* Setting maximum message size */
if(len < max_msg_size)
{
len = max_msg_size;
- setsockopt(ossock, SOL_SOCKET, SO_SNDBUF, &len, optlen);
+ if(setsockopt(ossock, SOL_SOCKET, SO_SNDBUF, &len, optlen) < 0)
+ {
+ OS_CloseSocket(ossock);
+ return(OS_SOCKTERR);
+ }
}
- /* Returning the socket */
+ /* Returning the socket */
return(ossock);
}
if((_ip == NULL)||(_ip[0] == '\0'))
+ {
+ OS_CloseSocket(ossock);
return(OS_INVALID);
+ }
if(ipv6 == 1)
inet_pton(AF_INET6, _ip, &server6.sin6_addr.s6_addr);
if(connect(ossock,(struct sockaddr *)&server6, sizeof(server6)) < 0)
+ {
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
+ }
#endif
}
else
if(connect(ossock,(struct sockaddr *)&server, sizeof(server)) < 0)
+ {
+ OS_CloseSocket(ossock);
return(OS_SOCKTERR);
+ }
}
if((clientsocket = accept(socket, (struct sockaddr *) &_nc,
&_ncl)) < 0)
- return(-1);
+ return(-1);
strncpy(srcip, inet_ntoa(_nc.sin_addr),addrsize -1);
srcip[addrsize -1]='\0';
{
char *ret;
- int retsize=0;
-
ret = (char *) calloc((sizet), sizeof(char));
if(ret == NULL)
return(NULL);
- if((retsize = recv(socket, ret, sizet-1,0)) <= 0)
+ if(recv(socket, ret, sizet-1,0) <= 0)
+ {
+ free(ret);
return(NULL);
+ }
return(ret);
}
*/
int OS_RecvTCPBuffer(int socket, char *buffer, int sizet)
{
- int retsize = 0;
+ int retsize;
- while(!retsize)
+ if((retsize = recv(socket, buffer, sizet -1, 0)) > 0)
{
- retsize = recv(socket, buffer, sizet -1, 0);
- if(retsize > 0)
- {
- buffer[retsize] = '\0';
- return(0);
- }
- return(-1);
+ buffer[retsize] = '\0';
+ return(0);
}
return(-1);
}
return(NULL);
if((recv(socket,ret,sizet-1,0))<0)
+ {
+ free(ret);
return(NULL);
+ }
return(ret);
}
return(NULL);
}
+int OS_CloseSocket(int socket)
+{
+ #ifdef WIN32
+ return (closesocket(socket));
+ #else
+ return (close(socket));
+ #endif /* WIN32 */
+}
+
/* EOF */