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

📄 net.c

📁 MIDI解码程序(用VC编写)
💻 C
字号:
/*    TiMidity++ -- MIDI to WAVE converter and player    Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#ifdef HAVE_CONFIG_H#include "config.h"#endif /* HAVE_CONFIG_H */#include <stdio.h>#include <stdlib.h>#if !defined(WINSOCK)#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <arpa/inet.h>  /* for inet_ntoa */#ifndef NO_STRING_H#include <string.h>#else#include <strings.h>#endif#endif#include "timidity.h"#include "common.h"#include "net.h"#ifndef INADDR_NONE#define INADDR_NONE 0xffffffff#endif /* INADDR_NONE */#if !defined(WINSOCK)#ifndef INVALID_SOCKET#define INVALID_SOCKET -1#endif /* INVALID_SOCKET */#ifndef SOCKET_ERROR#define SOCKET_ERROR -1#endif /* SOCKET_ERROR */#endifSOCKET open_socket(char *host, unsigned short port){    SOCKET fd;    struct sockaddr_in in;#if defined(WINSOCK)    static int first = 1;    if(first) {	WSADATA dmy;	WSAStartup(MAKEWORD(1,1), &dmy);	first = 0;    }#endif    memset(&in, 0, sizeof(in));    if((in.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE)    {	struct hostent *hp;	if((hp = gethostbyname(host)) == NULL)	    return (SOCKET)-1;	memcpy(&in.sin_addr, hp->h_addr, hp->h_length);    }    in.sin_port = htons(port);    in.sin_family = AF_INET;    if((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)	return (SOCKET)-1;    if(connect(fd, (struct sockaddr *)&in, sizeof(in)) == SOCKET_ERROR)    {	closesocket(fd);	return (SOCKET)-1;    }    return fd;}#if !defined(__W32__) || defined(__CYGWIN32__)long socket_write(SOCKET fd, char *buff, long bufsiz){    return write(fd, buff, bufsiz);}int socket_shutdown(SOCKET fd, int how){    return shutdown(fd, how);}FILE *socket_fdopen(SOCKET fd, char *mode){    return fdopen(fd, mode);}char *socket_fgets(char *buff, int n, FILE *fp){    return fgets(buff, n, fp);}int socket_fgetc(FILE *fp){    return getc(fp);}long socket_fread(void *buff, long bufsiz, FILE *fp){    return (long)fread(buff, 1, bufsiz, fp);}long socket_fwrite(void *buff, long bufsiz, FILE *fp){    return (long)fwrite(buff, 1, bufsiz, fp);}int socket_fclose(FILE *fp){    return fclose(fp);}int socket_fflush(FILE *fp){    return fflush(fp);}#else /* __W32__ */#include "url.h"/* Fake FILE * */typedef struct _w32_fp_socket_t{    SOCKET fd; /* Now, It has only fd */} w32_fp_socket;#define W32_FP2SOCKET(fp) (((w32_fp_socket *)(fp))->fd)static long socket_safe_recv(SOCKET fd, char *buff, long bufsiz){    fd_set fds;    int maxfd, n;    FD_ZERO(&fds);    FD_SET(fd, &fds);    maxfd = fd + 1;    n = select(maxfd, &fds, NULL, NULL, NULL);    if(n <= 0)	return n;    return recv(fd, buff, bufsiz, 0);}long socket_write(SOCKET fd, char *buff, long bufsiz){    return send(fd, buff, bufsiz, 0);}int socket_shutdown(SOCKET fd, int how){    return shutdown(fd, how);}#pragma argsusedFILE *socket_fdopen(SOCKET fd, char *mode){    FILE *fp;    /* w32_fp_socket fake FILE.     * `mode' argument is ignored.     */    if((fp = (FILE *)safe_malloc(sizeof(w32_fp_socket))) == NULL)	return NULL;    memset(fp, 0, sizeof(w32_fp_socket));    W32_FP2SOCKET(fp) = fd;    return fp;}static int socket_getc(SOCKET fd){    int n;    unsigned char c;        n = socket_safe_recv(fd, (char *)&c, 1);    if(n <= 0)	return EOF;    return (int)c;}char *socket_fgets(char *buff, int n, FILE *fp){    SOCKET fd = W32_FP2SOCKET(fp);    int len;    n--; /* for '\0' */    if(n == 0)	*buff = '\0';    if(n <= 0)	return buff;    len = 0;    while(len < n)    {	int c;	c = socket_getc(fd);	if(c == -1)	    break;	buff[len++] = c;	if(c == url_newline_code)	    break;    }    if(len == 0)	return NULL;    buff[len] = '\0';    return buff;}int socket_fgetc(FILE *fp){    SOCKET fd = W32_FP2SOCKET(fp);    return socket_getc(fd);}long socket_fread(void *buff, long bufsiz, FILE *fp){    SOCKET fd = W32_FP2SOCKET(fp);    return socket_safe_recv(fd, buff, bufsiz);}long socket_fwrite(void *buff, long bufsiz, FILE *fp){    SOCKET fd = W32_FP2SOCKET(fp);    return socket_write(fd, buff, bufsiz);}int socket_fclose(FILE *fp){    SOCKET fd = W32_FP2SOCKET(fp);    int ret;    ret = closesocket(fd);    free(fp);    return ret;}int socket_fflush(FILE *fp){    return 0;}#endif

⌨️ 快捷键说明

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