⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slpd_socket.h

📁 SLP协议在linux下的实现。此版本为1.2.1版。官方网站为www.openslp.org
💻 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 + -