发新话题
打印

关于socket程序的疑问

关于socket程序的疑问

下面是一个很简单的服务器程序,可运行时为什么显示bind函数的返回结果是很大的数(大于100000),应该是-1或0 才对呀。
) ]1 S! @# S/ Z# s#include <sys/types.h>- E. V$ k5 x, X9 f
#include <sys/socket.h>
' g4 H5 X" v4 @; G& V#include <stdio.h>
4 {0 l6 b$ H+ l, b8 V#include <sys/un.h>
( [! d/ Y, B& d) ~/ M+ e#include <unistd.h>
% N. W& \# m" V/ K8 c4 }& lint main()9 b. k; f5 M2 v; r0 d
{
3 K& l* F7 b( E- h( ]0 ^
( O$ B7 x# M+ U" L$ q! [3 y9 N    int server_sockfd,client_sockfd;
5 D2 ^7 H$ N% y1 Q$ H. ^    int server_len,client_len,status;
" T8 o0 C/ j( l0 _) [2 S5 d0 \$ ]8 n    struct sockaddr_un server_address;
# E2 p# J$ f. U/ F1 C4 d* Q    struct sockaddr_un client_address;
% _# ]* m" T0 P# t    3 ]1 b: S- Z) j7 y9 a7 p% s; ^, J0 V
! e1 v8 u. N+ S* ?8 E
    unlink("server_socket");3 K8 Z3 H2 R$ `
    server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);
7 ~6 Y! P2 X& K+ H5 G; W8 v* I
/ v- f$ s- x6 |/ H3 N    server_address.sun_family=AF_UNIX;
6 p& D; G7 S, c    strcpy(server_address.sun_path,"server_socket");
( h- S2 U4 U3 U4 N% U    server_len=sizeof(server_address);8 x  S( _) |$ B8 Z. X- g! M. }
    bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
3 ~: r  b2 H$ w% g4 H# ]6 {6 L& w    if (status == -1)
1 B  z& Y& N& y! V9 o    perror("bind is ");! Z  q( {" a, R& ]. D2 |
    printf("bind status is %d\n",status);& V& V8 ^: P% A- w) ]
    listen(server_sockfd,5);: ~& u$ v$ _" B* P  y- i2 e
  V# W' S3 ~. U& m3 ]
//        while(1) {
0 Y! I* K- ]8 S             char ch;6 ?6 D$ `' C, w7 _: h  z9 V
             printf("server waiting\n");
! t1 A) w1 E" x5 P             client_len=sizeof(client_address);8 T% q) x3 I3 C
             sleep(2);9 u* y8 U- ^' h
             client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len);
" x+ |% I, l) v# v$ G! }. l# E             read(client_sockfd,&ch,1);
5 b2 @, R$ ?0 |6 {, x5 u             ch++;' W8 d9 F7 c5 `/ R) @1 n
             write(client_sockfd,&ch,1);
8 h1 D4 @5 o6 j9 h, N- u" W$ K             close(client_sockfd);$ C8 i1 ?7 {/ s2 q: G
//              }* b: M8 |' H2 v
}

TOP

I服了U,status不赋值就打印出来,你想用意念术来赋值吗?) v6 s- ~' A* w- T
不好好检查代码就来这里提问,以为别人都是代码检查工具不成!
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

惭愧啊,惭愧,是我太粗心了,没有认真检查,这就去改,多谢版主!: ?# t8 R4 N- d% k6 \2 ^5 z
以前有个贴代码的帖子,告诉怎么能保持代码的美观,现在怎么没有了呢?

TOP

新修改的:
; d9 A( t* `# V1 b[QUOTE]  B6 o2 A9 `9 `& m2 ^0 d, J2 q) o
#include <sys/types.h>
# b* n- C) D2 w1 r#include <sys/socket.h>3 e# B7 z' U' N5 u; r0 X
#include <stdio.h>2 c& o0 ?5 e! }7 a
#include <sys/un.h>
7 b, s1 o6 `3 z/ E& o2 z#include <unistd.h>
6 W9 Z3 Y4 B) z; G! D# N  M0 N2 wint main()0 e' q( V$ x( |' d
{3 \1 \3 ?& E% ~' v3 `" k
                                                                                                                                               
1 p5 S3 j4 S9 h  B2 y  u    int server_sockfd,client_sockfd;
) r# Z  I6 F: n$ Z    int server_len,client_len,status;
% w# J, R# K3 u    struct sockaddr_un server_address;
  H) ^/ s% b( [' `6 L& Y  J    struct sockaddr_un client_address;, Z& {1 o7 I2 ]5 \' z% ~3 j* [: t
                                                                                                                                               
! R0 Y3 ]& l( @4 d. s                                                                                                                                               
' y; O) w" O  R5 H! r//   unlink("server_socket");3 J. x, [# V( \$ G, w% g$ N0 u
    server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);
" g7 g( r5 p; x* p8 T7 M( x    printf("socket return is %d\n",server_sockfd);3 r4 S+ ^( V! ~/ \4 F1 X
    perror("socket is");
3 f+ D5 g8 v' N! A    server_address.sun_family=AF_UNIX;
9 b/ W( e1 o: R    strcpy(server_address.sun_path,"server_socket");4 t8 c) [. z5 x. B# d9 M
    server_len=sizeof(server_address);
( e2 H5 r' o* W4 Q4 e    status = bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
. q: O7 v: K, y0 a+ `: [    if (status == -1)0 M6 f7 L. A4 C8 I) l$ o% n. k
    perror("bind is ");
0 C1 {0 U; K! R. W1 @* R' F7 T    printf("bind status is %d\n",status);
& F2 S8 O9 f8 S; a    listen(server_sockfd,5);
9 z, w- {4 Q4 _9 U! M! B                                                                                                                                               2 i9 I: \0 m: }, r
        while(1) {; }5 [: B: B, s* W# ]' r7 X
             char ch;
* [, X, Z/ r, N8 A$ T             printf("server waiting\n");
6 K4 l# j& G2 t/ `6 L5 L             client_len=sizeof(client_address);7 K* U, X* S, N' e' u9 Q" o
             sleep(2);
( P2 c* [; q. t5 B8 q             client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len);
8 J7 u  V; W- h+ |% D$ M             read(client_sockfd,&ch,1);
. }* n% D5 J% l. |% h             ch++;
3 J4 n( w8 @  o9 F. ]+ k* L/ K             write(client_sockfd,&ch,1);
6 O- g. Z, e$ n) ?             close(client_sockfd);4 t, e' `, I$ B' B2 @3 [1 }
                }1 c4 E( q* x3 x) K* }- B+ B
}
1 e+ e: }! X) u+ }. s( ^
' H, K% T" J- L  f运行返回是:* E7 L) N4 P: A7 t8 B0 g. U& [! h
root@localhost cx]# ./fuwu8 |* N  }( C9 [8 E
socket return is 3. U2 Z( {9 d: r1 Q; ?0 U4 V; P
socket is: Success
) x3 u0 R4 m, o  w+ u+ bbind is : Operation not permitted
: f  x9 B7 {6 w$ E1 _bind status is -19 S5 c# A: Y+ W* \% F
server waiting* H. n) T  {0 K$ f
server waiting6 l: t, G) ]0 w" U
5 o2 _- M6 w# F5 K8 k
% d, }% g- u- L' t0 E
                                                                                                                                               ) N4 w; D  ~- B! J: v
[/QUOTE]
0 ^+ k* J1 n7 {% @. d' kbind is : Operation not permitted    是什么问题?我是以vroot  身份运行的啊.

TOP

借用引用的格式现发上去吧

TOP

server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);) `6 n8 M) [& S, N" W

. T6 v! z7 A9 Y4 [把AF_UNIX换一下试试

TOP

发新话题