struct protoent 구조, getprotobyname 및 관련 함수

3689 단어
내 삽입식 장치에 패키지 프로그램을 써서 프로토콜 번호에 대한 정보를 얻었는데 getprotobynumber를 호출할 때 항상 오류가 발생했다
되돌아오는 프로토콜 구조 바늘이 항상 비어 있습니다. 디버깅 정보를 출력했습니다.
src_addr:192.168.5.155,dst_addr:180.153.201.235
ip_p=6-------
protoent is NULL!!!!
src_addr:180.153.201.235,dst_addr:192.168.5.155
ip_p=6-------
protoent is NULL!!!!
src_addr:192.168.5.155,dst_addr:180.153.201.235
ip_p=6-------
protoent is NULL!!!!
src_addr:180.153.201.235,dst_addr:192.168.5.155
ip_p=6-------
protoent is NULL!!!!

인터넷에서 이 함수에 관한 블로그를 찾았는데,http://yadang418.blog.163.com/blog/static/2684365620096101121612/  
"이 함수는/etc/protocols에서 조건에 맞는 데이터를 찾아서 구조protoent에서 되돌려준다"는 말이 있는데, 내 장치/etc에 이 파일이 없다는 것을 알았다
linux에 있는 것을 복사해서 들어가서 시험해 보고 실행해 보세요. ok!!
src_addr:192.168.5.152,dst_addr:238.8.8.8
ip_p=17-------
pro_name :udp
udp src_port:60597,dst_port:11111
src_addr:192.168.5.30,dst_addr:255.255.255.255
ip_p=17-------
pro_name :udp
udp src_port:3601,dst_port:3600
src_addr:192.168.5.152,dst_addr:238.8.8.8
ip_p=17-------
pro_name :udp
udp src_port:60597,dst_port:11111
src_addr:192.168.5.152,dst_addr:238.8.8.8
ip_p=17-------
pro_name :udp
udp src_port:60597,dst_port:11111

관련 함수: getprotobyname, getprotoent, setprotoent,endprotoent
머리글 파일: #include
함수 정의:struct protoent *getprotobynumber (int proto)
함수 설명: getprotobynumber () 는 검색하고자 하는 네트워크 프로토콜 번호인 프로토콜 구조를 되돌려줍니다.이 함수는/etc/protocols에서 조건에 맞는 데이터를 찾아서 구조protoent에서 되돌려줍니다.구조protoent 정의는 getprotoent () 참조
반환값: 성공하면protoent 구조의 지장을 되돌려줍니다. 오류가 있거나 일치하는 데이터를 찾지 못하면 NULL 포인터를 되돌려줍니다.
struct protoent 구조
      
/* Description of data base entry for a single service.  */
struct protoent
{
  char *p_name;         /* Official protocol name.  */
  char **p_aliases;     /* Alias list.  */
  int p_proto;          /* Protocol number.  */
};

getprotobyname (): 통신 협정 (protocol) 의 명칭에 따라 이 통신 협정의 기타 자료를 얻습니다. 
격식:struct protoent * getprotobyname (const char*name); 
참조:name 통신 협정 이름
반환값: 성공 - struct protoent에 대한 포인터
실패 - NULL
설명: 통신협정의 명칭을 이용하여 이 통신협정의 별명, 번호 등 자료를 알 수 있다. 
getprotobynumber (): 통신 협정의 번호에 따라 이 통신 협정의 기타 자료를 얻습니다. 
격식: struct protoent * getprotobynumber (int number); 
참수:number host 배열 방식의 통신 협정 번호
반환값: 성공 - struct protoent에 대한 포인터
실패 - NULL
설명: 통신협정의 번호를 이용하여 이 통신협정의 명칭, 별명 등 자료를 알 수 있다. 
============2.6.31 커널=======================
/* Open protocol data base files and mark them as staying open even
   after a later search if STAY_OPEN is non-zero.
   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern void setprotoent (int __stay_open);

/* Close protocol data base files and clear `stay open' flag.
   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern void endprotoent (void);

/* Get next entry from protocol data base file.  Open data base if
   necessary.
   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern struct protoent *getprotoent (void);

/* Return entry from protocol data base for network with NAME.
   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern struct protoent *getprotobyname (__const char *__name);

/* Return entry from protocol data base which number is PROTO.
   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern struct protoent *getprotobynumber (int __proto);

=================end========================

좋은 웹페이지 즐겨찾기