发新话题
打印

关于socket程序的疑问

关于socket程序的疑问

下面是一个很简单的服务器程序,可运行时为什么显示bind函数的返回结果是很大的数(大于100000),应该是-1或0 才对呀。% Q+ C7 ?/ }% ~+ a, D( q
#include <sys/types.h>
# S* Y9 B$ C7 F+ N# O#include <sys/socket.h>
; G, V3 N  [% b5 x. H4 p3 K#include <stdio.h>
) q+ m0 A# i  D#include <sys/un.h>
' @0 a) ~1 h; E9 X4 S#include <unistd.h>6 C! p* H2 O$ @; ~  M( m& T. z
int main()
* D& U; I. A$ G  w& g{
' n; N5 v' d5 n' y2 U- O  o, ]1 g) u
% s7 n8 A' K- `- _    int server_sockfd,client_sockfd;& B' z8 y2 Y$ [: o$ G3 H
    int server_len,client_len,status;
! Z9 h$ M$ d* Z+ M, y    struct sockaddr_un server_address;
7 V6 A4 n0 F/ J; L: V    struct sockaddr_un client_address;2 v* x/ ~& j: j2 |  m' i
    2 C  |- V9 L; G' c& q
1 w9 J& ]: s2 E
    unlink("server_socket");" Q. E0 x' e7 B  ?4 g: }
    server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);  H8 c" Z5 _, Y9 B" C  s5 `! {

; o& G- L/ l9 T$ G4 c5 n    server_address.sun_family=AF_UNIX;
- e& g% Q3 q8 W% ^' B    strcpy(server_address.sun_path,"server_socket");# s0 w  L3 y* _4 _/ t
    server_len=sizeof(server_address);# F8 G  Y/ P3 D) r$ A
    bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
3 R6 r& U; R0 `$ N  Z! W1 J3 E    if (status == -1): z9 S2 }& M1 t- \* r# y4 W
    perror("bind is ");
7 u/ l5 X- [% r    printf("bind status is %d\n",status);/ W! L; V1 y: K9 B
    listen(server_sockfd,5);
" o! `9 W  q) D# c& e
' p! [4 o- O/ K8 C* ?- F/ Q//        while(1) {
: R0 G9 }2 f$ v8 f3 E0 U- K             char ch;9 o2 W! q, _. s' R
             printf("server waiting\n");7 |% z' G" \4 Q5 r) J
             client_len=sizeof(client_address);, t* p7 S8 o# r" e
             sleep(2);
6 N$ F4 Y$ l9 r. ~! X2 u/ H             client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len);: Z( g5 s2 O* Q+ `: _1 _, D) z  u5 J
             read(client_sockfd,&ch,1);5 _7 }+ v% h3 N8 H
             ch++;& n1 {5 o% n  z) S
             write(client_sockfd,&ch,1);
4 }8 n3 `: _+ S             close(client_sockfd);" s! ^  X$ W5 D  M3 I
//              }8 q$ x  G3 B( `) v( C7 W3 M
}      

TOP

I服了U,status不赋值就打印出来,你想用意念术来赋值吗?% P5 _1 _3 [. D1 X: V- j
不好好检查代码就来这里提问,以为别人都是代码检查工具不成!      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

惭愧啊,惭愧,是我太粗心了,没有认真检查,这就去改,多谢版主!8 S& r) W: l1 P9 t& o
以前有个贴代码的帖子,告诉怎么能保持代码的美观,现在怎么没有了呢?      

TOP

新修改的:9 l* |! D+ w' s5 l6 d! \& s
[QUOTE]
4 ^, G$ Z4 `  M# ^) q+ T9 v8 x. H#include <sys/types.h>
  Y+ ]; b# j# h3 @' z2 c#include <sys/socket.h>
8 d% t! S4 X8 T4 f#include <stdio.h>4 z7 G( }8 U) _1 F" W+ g4 J  D! Y
#include <sys/un.h>" [* d) u2 P$ \, ]$ q! I! W5 w3 @
#include <unistd.h>
: u: r# N' W! Y6 Uint main()
) M  D. U) V* g/ ~" `  Y{
" N. m4 ~+ V/ D( s( Q! n+ G                                                                                                                                               + y& u6 V' a; `; N$ W$ a2 ?0 B* ^
    int server_sockfd,client_sockfd;
4 H0 `& |/ k/ Y3 U! M    int server_len,client_len,status;
; d) B7 K- T9 j1 G    struct sockaddr_un server_address;
: U9 A$ E7 E2 M0 n5 D    struct sockaddr_un client_address;2 F" \! ]3 i( `! r
                                                                                                                                               
+ }$ t- w5 p- @  G                                                                                                                                               - f% v" W9 f% N7 Y( @+ V+ N6 L
//   unlink("server_socket");
0 H* W6 m/ R8 s    server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);
5 r' S* d4 w, b/ z0 u& q    printf("socket return is %d\n",server_sockfd);7 a9 ]& m1 R% P  d- ~# b% H3 u: _7 Y
    perror("socket is");
9 L7 m' p' t- U- X( ]    server_address.sun_family=AF_UNIX;$ e$ N0 X# j7 w$ {4 ]1 w3 n5 d
    strcpy(server_address.sun_path,"server_socket");5 F* p5 v% v/ ~/ A0 A+ l& l( F
    server_len=sizeof(server_address);
5 D" V( U% I' G4 C/ d3 H; T    status = bind(server_sockfd,(struct sockaddr *)&server_address,server_len);( k2 Q$ x3 h5 X" G# w
    if (status == -1)
" Q5 P+ ?% R( ]    perror("bind is ");7 W: A( j5 S  r1 `
    printf("bind status is %d\n",status);
7 G/ W: |( P! a    listen(server_sockfd,5);
' {/ j. H. c3 d; R                                                                                                                                               
$ ^3 m1 {% s6 ]2 H        while(1) {* ~$ m) s) B$ N: O1 E3 h5 M6 q
             char ch;
6 r) c+ M( b8 F3 d1 @             printf("server waiting\n");
6 K8 n  m; g! C             client_len=sizeof(client_address);
4 k( z' @3 l" r2 {) C( l, ?% g% z  B) w             sleep(2);$ E1 l! T& d7 t/ }$ B  m5 F9 j# q
             client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len);
7 v6 v% y- _: Q9 T& \2 _             read(client_sockfd,&ch,1);
* R$ b6 {4 I+ @5 i             ch++;" A8 L& U4 l0 z5 Y: `8 a
             write(client_sockfd,&ch,1);
& o7 K! g8 I5 g, w" }( I  K1 u0 T$ o             close(client_sockfd);3 c7 {. W: Q6 @- ?9 t* p
                }
5 G" ^1 f4 v' N' o/ t}
& Z7 m. C$ R- Y" }; k! }2 ^6 y" L% I2 b1 i9 f" w  C! [
运行返回是:# f( `$ ?7 L4 y; T8 f5 ?! j8 u( Z
root@localhost cx]# ./fuwu" r3 N1 F, ~" ~7 B+ M# w
socket return is 3. P; W0 z7 m9 Z7 U5 H$ o
socket is: Success
0 n1 R" M6 |/ |bind is : Operation not permitted
+ ^9 q6 U: @5 R/ q# D! Cbind status is -1
7 Q  [% c# _! U* w2 g, a$ Pserver waiting
& ]; E5 g: M$ yserver waiting/ _. _% ~4 A. d) k# m5 D7 b4 Q* r
9 v  _7 o1 z9 K
3 |2 P1 h5 Y& }2 n
                                                                                                                                               & ?6 J  B% m8 K7 v. ^( R4 l& l% q
[/QUOTE]) B5 Y, N9 A% S! e, W
bind is : Operation not permitted    是什么问题?我是以vroot  身份运行的啊.      

TOP

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

TOP

server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);3 N5 ^& Z, H1 K# M" u7 ~* O, |
, Y9 o& A4 l& z) O6 j! q% l3 `6 n5 j! Y
把AF_UNIX换一下试试      

TOP

发新话题