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

📄 wvsockuploadpathlib.c

📁 VXWORKS源代码
💻 C
字号:
/* wvSockUploadPathLib.c -  socket upload path library *//* Copyright 1998 Wind River Systems, Inc. *//*modification history--------------------02i,28aug98,dgp  FCS man page edit02h,06aug98,cth  added ability to create path with host name02g,08may98,dgp  clean up man pages for WV 2.0 beta release02f,15apr98,cth  removed errno set02e,20mar98,cth  removed debug print statements02d,27jan98,cth  removed oob error indications, removed sockUploadPathError,		 changed SOSENDBUFSIZE to sockUpPathSendBufSize02c,19dec97,cth  renamed again from wvSockUploadPath.c to wvSockUploadPathLib.c,                 added sockUploadPathLibInit, updated include files02b,16nov97,cth  renamed again from sockUploadPath.c to wvSockUploadPath.c                 changed include sockUploadPathP.h to wvSockUploadPathP.h02a,16nov97,cth  rewritten for WV2.0		 renamed file to sockUploadPath.c from evtSockLib.c01g,21aug97,cth  reverted functionality to 01e, TSFS support now in		 evtTsfsSockLib.c01f,18aug97,cth  added support for upload through TSFS01e,31jul97,nps  WindView 2.0 - evtSockInit now passes fd to event rBuff.01d,22feb94,smb  corrected Copyright date (SPR #2910)01c,21jan94,maf  shut off event logging when write() to event socket fails		   (SPR #2805).		 handle case of write() writing fewer bytes than requested		   in evtSockDataTransfer().                 other minor tweaks.01b,18jan94,maf  evtSockError() now closes event stream socket (part of fix		   for SPR #2800).01a,10dec93,smb  created.*//*DESCRIPTIONThis file contains routines that are used by wvLib to pass event data fromthe target buffers to the host.  This particular event-upload path opensa normal network socket connected with the WindView host process to transfer the data.INCLUDE FILES:SEE ALSO:  wvTsfsUploadPathLib, wvFileUploadPathLib*/#include "vxWorks.h"#include "fcntl.h"#include "stdlib.h"#include "in.h"#include "inetLib.h"#include "ioLib.h"#include "logLib.h"#include "nfsLib.h"#include "socket.h"#include "sockLib.h"#include "hostLib.h"#include "string.h"#include "sys/socket.h"#include "private/wvUploadPathP.h"#include "private/wvSockUploadPathLibP.h"typedef struct sockUploadPath  	/* SOCK_UPLOAD_DESC */    {    UPLOAD_DESC path;		/* struct must begin with this descriptor */    int		sockFd;		/* private fd for each upload path */    } SOCK_UPLOAD_DESC;/* globals */int sockUpPathSendBufSize = (64 * 1024 >> 1);/********************************************************************************* sockUploadPathLibInit - initialize wvSockUploadPathLib library (Windview)** This routine initializes wvSockUploadPathLib by pulling in the* routines in this file for use with WindView.  It is called during system* configuration from usrWindview.c.** RETURN: OK.**/STATUS sockUploadPathLibInit (void)    {    return OK;    }/********************************************************************************* sockUploadPathCreate - establish an upload path to the host using a socket (Windview)** This routine initializes the TCP/IP connection to the host process that * receives uploaded events.  It can be retried if the connection attempt fails.** RETURNS: The UPLOAD_ID, or NULL if the connection cannot be completed or * memory for the ID is not available.** SEE ALSO: sockUploadPathClose()*/UPLOAD_ID sockUploadPathCreate     (    char *ipAddress,	    /* server's hostname or IP address in .-notation */    short port		    /* port number to bind to */    )    {    SOCK_UPLOAD_DESC   *pSockUploadDesc;	/* this socket's descriptor */    struct sockaddr_in	sin;			/* address of server */    /* Allocate the upload path's descriptor. */    if ((pSockUploadDesc = (SOCK_UPLOAD_DESC *)                           malloc (sizeof (SOCK_UPLOAD_DESC))) == NULL)        {        logMsg ("sockUploadPathCreate: failed to allocate upload descriptor.\n",                0, 0, 0, 0, 0, 0);        return (NULL);        }    /* Open the upload socket. */    if ((pSockUploadDesc->sockFd = socket (AF_INET, SOCK_STREAM,  					  IPPROTO_TCP)) == ERROR)        {        logMsg ("sockUploadPathCreate: failed to open socket.\n",                0, 0, 0, 0, 0, 0);        return (NULL);        }    /* Increase the socket's send-buffer size. */    if (setsockopt (pSockUploadDesc->sockFd, SOL_SOCKET,                     SO_SNDBUF, (char *) & sockUpPathSendBufSize,                     sizeof (sockUpPathSendBufSize)) == ERROR)        {        logMsg ("sockUploadPathCreate: setsockopt failed\n",                0, 0, 0, 0, 0, 0);	close (pSockUploadDesc->sockFd);        return (NULL);        }    /* Fill in the server's address before connection. */    bzero ((char *) &sin, sizeof (sin));    sin.sin_family      = AF_INET;    sin.sin_port        = htons (port);    if ((sin.sin_addr.s_addr = hostGetByName (ipAddress)) == ERROR &&        (sin.sin_addr.s_addr = inet_addr (ipAddress)) == ERROR)        {        logMsg ("sockUploadPathCreate: failed to get inet addr for (%s)\n",                (int) ipAddress, 0, 0, 0, 0, 0);	close (pSockUploadDesc->sockFd);        return (NULL);	}    /* Connect to host (server). */    if (connect (pSockUploadDesc->sockFd, (struct sockaddr *)&sin,                  sizeof (sin)) == ERROR)        {        logMsg ("sockUploadPathCreate: connect failed\n",                0, 0, 0, 0, 0, 0);	close (pSockUploadDesc->sockFd);        return (NULL);        }    /* Fill in the socket upload routines so the uploader can access them. */    pSockUploadDesc->path.writeRtn = (FUNCPTR) sockUploadPathWrite;    pSockUploadDesc->path.errorRtn = (FUNCPTR) sockUploadPathClose;    /* Cast the SOCK_UPLOAD_DESC to a generic UPLOAD_DESC before returning. */    return ((UPLOAD_ID) pSockUploadDesc);    }/********************************************************************************* sockUploadPathClose - close the socket upload path (Windview)** This routine closes the socket connection to the event* receiver on the host.** RETURNS: N/A** SEE ALSO: sockUploadPathCreate()*/void sockUploadPathClose     (    UPLOAD_ID upId			/* generic upload-path descriptor */    )    {    SOCK_UPLOAD_DESC *pSockUploadDesc;	/* upId cast to see private data */    if (upId == NULL)        return;    pSockUploadDesc = (SOCK_UPLOAD_DESC *) upId;    close (pSockUploadDesc->sockFd);    free (pSockUploadDesc);    }/********************************************************************************* sockUploadPathWrite - write to the socket upload path (Windview)** This routine writes <size> bytes of data beginning at <pStart> to the upload* path between the target and the event receiver on the host.** RETURNS: The number of bytes written, or ERROR.** SEE ALSO: sockUploadPathCreate()*/int sockUploadPathWrite    (    UPLOAD_ID   upId,                   /* generic upload-path descriptor */    char *      pStart,                 /* address of data to write */    size_t      size                    /* number of bytes of data at pStart */    )    {    SOCK_UPLOAD_DESC  *pSockUploadDesc; /* upId cast to see private data */    if (upId == NULL)        return (ERROR);    /* Cast upId to a SOCK_UPLOAD_DESC for access to private data. */    pSockUploadDesc = (SOCK_UPLOAD_DESC *)upId;    return (write (pSockUploadDesc->sockFd, pStart, size));    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -