📄 slpd_socket.h
字号:
/***************************************************************************//* *//* Project: OpenSLP - OpenSource implementation of Service Location *//* Protocol Version 2 *//* *//* File: slpd_socket.c *//* *//* Abstract: Socket specific functions implementation *//* *//* WARNING: NOT thread safe! *//*-------------------------------------------------------------------------*//* *//* Please submit patches to http://www.openslp.org *//* *//*-------------------------------------------------------------------------*//* *//* Copyright (C) 2000 Caldera Systems, Inc *//* All rights reserved. *//* *//* Redistribution and use in source and binary forms, with or without *//* modification, are permitted provided that the following conditions are *//* met: */ /* *//* Redistributions of source code must retain the above copyright *//* notice, this list of conditions and the following disclaimer. *//* *//* Redistributions in binary form must reproduce the above copyright *//* notice, this list of conditions and the following disclaimer in *//* the documentation and/or other materials provided with the *//* distribution. *//* *//* Neither the name of Caldera Systems nor the names of its *//* contributors may be used to endorse or promote products derived *//* from this software without specific prior written permission. *//* *//* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *//* `AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *//* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR *//* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CALDERA *//* SYSTEMS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *//* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *//* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, *//* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON *//* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *//* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE *//* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *//* *//***************************************************************************/#ifndef SLPD_SOCKET_H_INCLUDED#define SLPD_SOCKET_H_INCLUDED#include "slpd.h"/*=========================================================================*//* common code includes *//*=========================================================================*/#include "slp_buffer.h"/*=========================================================================*//* Misc constants *//*=========================================================================*/#define SLPD_SMALLEST_MESSAGE 18 /* 18 bytes is smallest SLPv2 msg *//*=========================================================================*//* Values representing a type or state of a socket *//*=========================================================================*/#define SOCKET_PENDING_IO 100#define SOCKET_LISTEN 0#define SOCKET_CLOSE 1#define DATAGRAM_UNICAST 2#define DATAGRAM_MULTICAST 3#define DATAGRAM_BROADCAST 4#define STREAM_CONNECT_IDLE 5#define STREAM_CONNECT_BLOCK 6 + SOCKET_PENDING_IO#define STREAM_CONNECT_CLOSE 7 + SOCKET_PENDING_IO#define STREAM_READ 8 + SOCKET_PENDING_IO#define STREAM_READ_FIRST 9 + SOCKET_PENDING_IO#define STREAM_WRITE 10 + SOCKET_PENDING_IO#define STREAM_WRITE_FIRST 11 + SOCKET_PENDING_IO#define STREAM_WRITE_WAIT 12 + SOCKET_PENDING_IO#ifdef _WIN32#define CloseSocket(Arg) closesocket(Arg)#else#define CloseSocket(Arg) close(Arg)#endif/*=========================================================================*/typedef struct _SLPDSocket/* Structure representing a socket *//*=========================================================================*/{ SLPListItem listitem; int fd; time_t age; /* in seconds */ int state; struct sockaddr_in ifaddr; /* address of interface */ struct sockaddr_in peeraddr; /* Incoming socket stuff */ SLPBuffer recvbuf; SLPBuffer sendbuf; /* Outgoing socket stuff */ int reconns; SLPList sendlist;}SLPDSocket;/*==========================================================================*/SLPDSocket* SLPDSocketCreateConnected(struct in_addr* addr);/* *//* addr - (IN) the address of the peer to connect to *//* *//* Returns: A connected socket or a socket in the process of being connected*//* if the socket was connected the SLPDSocket->state will be set *//* to writable. If the connect would block, SLPDSocket->state will*//* be set to connect. Return NULL on error *//*==========================================================================*//*==========================================================================*/SLPDSocket* SLPDSocketCreateListen(struct in_addr* peeraddr);/* *//* peeraddr - (IN) the address of the peer to connect to *//* *//* type (IN) DATAGRAM_UNICAST, DATAGRAM_MULTICAST, DATAGRAM_BROADCAST *//* *//* Returns: A listening socket. SLPDSocket->state will be set to *//* SOCKET_LISTEN. Returns NULL on error *//*==========================================================================*//*==========================================================================*/SLPDSocket* SLPDSocketCreateDatagram(struct in_addr* peeraddr, int type); /* peeraddr - (IN) the address of the peer to connect to *//* *//* type - (IN) the type of socket to create DATAGRAM_UNICAST, *//* DATAGRAM_MULTICAST, or DATAGRAM_BROADCAST *//* Returns: A datagram socket SLPDSocket->state will be set to *//* DATAGRAM_UNICAST, DATAGRAM_MULTICAST, or DATAGRAM_BROADCAST *//*==========================================================================*//*==========================================================================*/SLPDSocket* SLPDSocketCreateBoundDatagram(struct in_addr* myaddr, struct in_addr* peeraddr, int type); /* myaddr - (IN) the address of the interface to join mcast on *//* *//* peeraddr - (IN) the address of the peer to connect to *//* *//* type (IN) DATAGRAM_UNICAST, DATAGRAM_MULTICAST, DATAGRAM_BROADCAST *//* *//* Returns: A datagram socket SLPDSocket->state will be set to *//* DATAGRAM_UNICAST, DATAGRAM_MULTICAST, or DATAGRAM_BROADCAST *//*==========================================================================*//*=========================================================================*/SLPDSocket* SLPDSocketAlloc();/* Allocate memory for a new SLPDSocket. *//* *//* Returns: pointer to a newly allocated SLPDSocket, or NULL if out of *//* memory. *//*=========================================================================*//*=========================================================================*/void SLPDSocketFree(SLPDSocket* sock);/* Frees memory associated with the specified SLPDSocket *//* *//* sock (IN) pointer to the socket to free *//*=========================================================================*/#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -