- UID
- 44515
- 帖子
- 15
- 积分
- 97
- 阅读权限
- 10
- 注册时间
- 2007-2-10
- 最后登录
- 2014-10-10
- 在线时间
- 5 小时
|
本帖最后由 aaaxxxeee 于 2010-3-24 21:59 编辑
编译报如下错误
- > cc -Wall -g -std=c99 -o GetAddrInfo GetAddrI
- GetAddrInfo.c: In function 'main':
- GetAddrInfo.c:16: error: storage size of 'addrCriteria' isn't known
- GetAddrInfo.c:25: warning: implicit declaration of function 'getaddrinfo'
- GetAddrInfo.c:27: warning: implicit declaration of function 'gai_strerror'
- GetAddrInfo.c:27: warning: passing argument 2 of 'DieWithUserMessage' makes poit
- GetAddrInfo.c:30: error: dereferencing pointer to incomplete type
- GetAddrInfo.c:31: error: dereferencing pointer to incomplete type
- GetAddrInfo.c:35: warning: implicit declaration of function 'freeaddrinfo'
- GetAddrInfo.c:16: warning: unused variable 'addrCriteria'
复制代码 -----
GetAddrInfo.c代码- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <netdb.h>
- #include "Practical.h"
- int main(int argc, char *argv[]) {
- if (argc != 3) // Test for correct number of arguments
- DieWithUserMessage("Parameter(s)", "<Address/Name> <Port/Service>");
- char *addrString = argv[1]; // Server address/name
- char *portString = argv[2]; // Server port/service
- // Tell the system what kind(s) of address info we want
- struct addrinfo addrCriteria; // Criteria for address match
- memset(&addrCriteria, 0, sizeof(addrCriteria)); // Zero out structure
- addrCriteria.ai_family = AF_UNSPEC; // Any address family
- addrCriteria.ai_socktype = SOCK_STREAM; // Only stream sockets
- addrCriteria.ai_protocol = IPPROTO_TCP; // Only TCP protocol
- // Get address(es) associated with the specified name/service
- struct addrinfo *addrList; // Holder for list of addresses returned
- // Modify servAddr contents to reference linked list of addresses
- int rtnVal = getaddrinfo(addrString, portString, &addrCriteria, &addrList);
- if (rtnVal != 0)
- DieWithUserMessage("getaddrinfo() failed", gai_strerror(rtnVal));
- // Display returned addresses
- for (struct addrinfo *addr = addrList; addr != NULL; addr = addr->ai_next) {
- PrintSocketAddress(addr->ai_addr, stdout);
- fputc('\n', stdout);
- }
- freeaddrinfo(addrList); // Free addrinfo allocated in getaddrinfo()
- exit(0);
- }
复制代码 ------------
Practical.h- #ifndef PRACTICAL_H_
- #define PRACTICAL_H_
- #include <stdbool.h>
- #include <stdio.h>
- #include <sys/socket.h>
- // Handle error with user msg
- void DieWithUserMessage(const char *msg, const char *detail);
- // Handle error with sys msg
- void DieWithSystemMessage(const char *msg);
- // Print socket address
- void PrintSocketAddress(const struct sockaddr *address, FILE *stream);
- // Test socket address equality
- bool SockAddrsEqual(const struct sockaddr *addr1, const struct sockaddr *addr2);
- // Create, bind, and listen a new TCP server socket
- int SetupTCPServerSocket(const char *service);
- // Accept a new TCP connection on a server socket
- int AcceptTCPConnection(int servSock);
- // Handle new TCP client
- void HandleTCPClient(int clntSocket);
- // Create and connect a new TCP client socket
- int SetupTCPClientSocket(const char *server, const char *service);
- enum sizeConstants {
- MAXSTRINGLENGTH = 128,
- BUFSIZE = 512,
- };
- #endif // PRACTICAL_H_
复制代码 求指点!附件为所有代码。
源代码地址为:http://cs.ecs.baylor.edu/~donahoo/practical/CSockets2/ |
|