Not to be argumentative, but what you're trying to do is just so amazingly
much more complicated than any of my suggestions. Maybe I haven't
communicated it well, it maybe there's some requirement to your project
that I don't understand.

Why not just write a listener in PHP and redirect to it? It's basically no
work.

Handcrafting packets for this purpose is like building a car out of paper 
clips and cat hair because the car that's freely available to you is red -
and you don't like the color red because your old girlfriend used to wear 
it a lot.

miguel

On 23 May 2002, Vinod  Panicker wrote:
> What you said did make sense, and complements my knowledge of 
> sockets.
> 
> But what i'm not sure of is this - if i construct my own packet 
> and send it across, presuming that i do have the ip address and 
> port number of the client on which it is reading, will the client 
> accept it as a legitimate packet?
> 
> I suspect that since the packets would be having some kind of 
> session identifier / sequence number.
> 
> Getting the ip address and port number is no problem.  I already 
> have that getting stored on the server.  But from what i know of 
> sockets, i'm sceptical if the client will accept the packet.
> 
> Guess the only way to go ahead is to try this out.
> 
> Would someone pls pls pls write a PHP interface to libnet??
> 
> Tx,
> Vinod.
> 
> On Thu, 23 May 2002 Evan Nemerson wrote :
> >You're right- this is getting interesting ;)
> >
> >http://www.packetfactory.net/libnet/manual/4.html#s4.1.5
> >
> >Unless I'm mistaken, you don't need to actually hijack the 
> >socket- you merely
> >need to write to the network. Check out section 3.1 of RFC 793. 
> >There is
> >source and destination port- that is how they are routed. Okay 
> >anyone PLEASE
> >correct me if i'm wrong...
> >
> >My understanding is a socket is an interface to the kernel. So 
> >basically, you
> >talk to a socket, which the kernel associates with source and 
> >destination
> >ports, and destination IP address. Thats why you can just write 
> >to a socket
> >instead of explicitly stating all the information. The kernel 
> >then sends out
> >then creates the packet and send it to the destination IP.
> >
> >libnet would allow you to bypass the socket phase, and manually 
> >create a
> >socket. Think of a socket as a GUI for the network, and libnet is 
> >like a
> >console ;)
> >
> >Hope that helps, and once again anyone PLEASE correct any 
> >inaccuracies, since
> >I want to know.
> >
> >
> >
> >
> >On Tuesday 21 May 2002 23:53 pm, Vinod Panicker wrote:
> > > Thanks for the reply Miguel, but here i'm not trying to 
> >implement
> > > my own multi-threaded server - exactly the reason why i'm 
> >using
> > > Apache / PHP.
> > >
> > > I could have made a listening server which is based on a
> > > multi-threaded or multi-forked model, but the time and
> > > complexities involved would be huge.  Thats why I chose Apache 
> >/
> > > PHP.
> > >
> > > Now if what i'm asking for can be done, developers can 
> >easily
> > > leverage existing efficient server technologies (Apache) to 
> >build
> > > their own App servers.
> > >
> > > I know that there is no existing function in PHP that would 
> >allow
> > > it to retrieve the socket from Apache ;), all i'm asking for 
> >is a
> > > hack that would allow me to do it.
> > >
> > > I thought that i'd just as well post it on the mailing list 
> >before
> > > diving into the source code and trying to figure out for 
> >myself.
> > > No point trying to re-invent the wheel, right?
> > >
> > > Evan, that lib will allow me to create my own packets, but 
> >which
> > > socket do i send it to?  Thats been the question all along.
> > >
> > > I think this is getting really interesting :)
> > >
> > > Tx,
> > > Vinod.
> > >
> > > On Wed, 22 May 2002 Miguel Cruz wrote :
> > > >I don't think you're going to get Apache to hand you the
> > > >socket.
> > > >
> > > >However, you can write a program using the standalone (CGI) 
> >PHP
> > > >interpreter that will act like a server - check out
> > > >http://php.net/socket_create_listen for more info.
> > > >
> > > >You could redirect from your standard web server to your
> > > >listening PHP app
> > > >running on another port. You'll then have to implement at 
> >least a
> > > >subset
> > > >of the HTTP protocol in order to get browsers to talk to 
> >you.
> > > >
> > > >Unfortunately, since you can't - to the best of my knowledge 
> >-
> > > >fork a PHP
> > > >program, you're going to have to do your own homebrew 
> >threading
> > > >which will
> > > >make life slightly complicated.
> > > >
> > > >miguel
> > > >
> > > >On 22 May 2002, Vinod  Panicker wrote:
> > > > > It still seems like I havent made the problem clear 
> >enough.
> > > > >
> > > > > I am aware of the print(), echo() and flush() functions 
> >and
> > > >
> > > >what
> > > >
> > > > > they do.  It does not fit in as a solution.  Let me 
> >explain
> > > >
> > > >my
> > > >
> > > > > problem more elaborately -
> > > > > The client calls a PHP script, script_a.php on the 
> >Apache
> > > >
> > > >web
> > > >
> > > > > server, using a Keep-Alive connection.  The script 
> >returns
> > > >
> > > >some
> > > >
> > > > > response to the client which it uses.  Now since the
> > > >
> > > >connection is
> > > >
> > > > > a Keep-alive, apache still has it open for reading and
> > > >
> > > >writing.
> > > >
> > > > > When the client wants to call other scripts, it just 
> >sends
> > > >
> > > >the
> > > >
> > > > > request over the same connection.  Now the thing is that 
> >if
> > > >
> > > >the
> > > >
> > > > > server needs to send some ASYNCHRONOUS data to the 
> >client,
> > > >
> > > >without
> > > >
> > > > > the client requesting for anything, a normal PHP script 
> >wont
> > > >
> > > >be
> > > >
> > > > > able to do it, since the script would get executed by 
> >the
> > > >
> > > >web
> > > >
> > > > > server ONLY on a client request (coz thats the way HTTP
> > > >
> > > >works).
> > > >
> > > > > Now what i was thinking was - if i could get hold of the
> > > >
> > > >socket
> > > >
> > > > > that is being used by apache to send data to the client, 
> >I
> > > >
> > > >could
> > > >
> > > > > effectively write() to it, from a C++ app or a PHP 
> >script
> > > >
> > > >(which
> > > >
> > > > > gets invoked from lets say another server).  print(), 
> >echo()
> > > >
> > > >etc
> > > >
> > > > > are functions that write to the output stream, which is 
> >opened
> > > >
> > > >as
> > > >
> > > > > a result of the clients request, by the web server.
> > > > >
> > > > > I want the ability to write to a socket thats been 
> >created
> > > >
> > > >earlier
> > > >
> > > > > - i want to steal it from Apache, so that i can use it 
> >when
> > > >
> > > >and
> > > >
> > > > > where i like.
> > > > >
> > > > > Functions like echo() and print() are not going to work 
> >here,
> > > >
> > > >i
> > > >
> > > > > will have to use write() so that i can specify the socket 
> >to
> > > >
> > > >which
> > > >
> > > > > the data has to be written!
> > > > >
> > > > > Hope the problem is understood now.
> > > > >
> > > > > Now for your question -
> > > > > When the client wants to send data to the server, it just 
> >has
> > > >
> > > >to
> > > >
> > > > > open a socket connection with the web server, and issue a 
> >GET
> > > >
> > > >or a
> > > >
> > > > > POST request!  if the connection is a keep-alive 
> >connection,
> > > >
> > > >and
> > > >
> > > > > it has already been created, the client just has to do a 
> >GET
> > > >
> > > >or a
> > > >
> > > > > POST without the need to connect().
> > > > >
> > > > > This mechanism, where the client frequently connects() 
> >to
> > > >
> > > >the
> > > >
> > > > > server and checks for messages is called polling.  One 
> >way
> > > >
> > > >of
> > > >
> > > > > reducing the high overhead of this is to reuse the 
> >connection
> > > >
> > > >by
> > > >
> > > > > using a keep-alive connection.  A still better 
> >improvement
> > > >
> > > >would
> > > >
> > > > > be to remove the need for a poll altogether, by doing
> > > >
> > > >something
> > > >
> > > > > (thats what my question is all about) on the server so 
> >that it
> > > >
> > > >can
> > > >
> > > > > send data asynchronously to the server.
> > > > >
> > > > >
> > > > > Tx,
> > > > > Vinod.
> > > > >
> > > > > On Wed, 22 May 2002 Bogdan Stancescu wrote :
> > > > > >For your specific problem, I think Mr. Lemos has provided 
> >a
> > > > > >viable solution (using print() or echo() and flush() 
> >whenever
> > > >
> > > >you
> > > >
> > > > > >need to, instead of grabbing the socket and write() to 
> >it).
> > > >
> > > >My
> > > >
> > > > > >problem however is how you envision solving the 
> >communication
> > > >
> > > >the
> > > >
> > > > > >other way around (i.e. when the CLIENT wants to send data 
> >to
> > > >
> > > >the
> > > >
> > > > > >server).
> > > > > >
> > > > > >Bogdan
> > > > > >
> > > > > >Vinod Panicker wrote:
> > > > > >>Hi,
> > > > > >>
> > > > > >>Tx for your very prompt reply.
> > > > > >>
> > > > > >>Yeah, I'll post the solution as soon as I find it
> > > >
> > > >someplace.
> > > >
> > > > > >>Let me outline the problem in more detail -
> > > > > >>
> > > > > >>Client (VC++) calls a PHP script on the server, 
> >specifies
> > > >
> > > >the
> > > >
> > > > > >>connection type as Keep-Alive.  The PHP script, 
> >somehow
> > > >
> > > >(still a
> > > >
> > > > > >>big question) gets the socket on which the apache 
> >server
> > > >
> > > >has
> > > >
> > > > > >>received the client request (so that it can send data 
> >to
> > > >
> > > >the
> > > >
> > > > > >>client later) and stores it in a database.
> > > > > >>
> > > > > >>Now whenever another PHP script wants to send data
> > > > > >>asynchronously to the client, it gets the socket from 
> >the
> > > > > >>database, and just calls a write() on it.  Since the
> > > >
> > > >connection
> > > >
> > > > > >>is still open (Keep-Alive), the client receives the
> > > >
> > > >information,
> > > >
> > > > > >>and doesnt have to poll the server periodically.
> > > > > >>
> > > > > >>The application of this is indeed destined for a 
> >messaging
> > > > > >>product, and could benefit a lot of other areas as 
> >well.
> > > > > >>
> > > > > >>The only thing that is needed is the socket from 
> >apache.
> > > > > >>
> > > > > >>Someone somewhere knows how to get this done, i'm sure 
> >:)
> > > > > >>
> > > > > >>Possibly a hack into the PHP module can get this done, 
> >i'm
> > > >
> > > >open
> > > >
> > > > > >>to suggestions.
> > > > > >>
> > > > > >>Tx,
> > > > > >>Vinod.
> > > > > >>
> > > > > >>On Tue, 21 May 2002 Bogdan Stancescu wrote :
> > > > > >>>Hi!
> > > > > >>>
> > > > > >>>I'm looking for an answer to your questions as well, so 
> >if
> > > >
> > > >you
> > > >
> > > > > >>>do find a solution on other lists, could you please 
> >post
> > > >
> > > >it
> > > >
> > > > > >>>here as well?
> > > > > >>>
> > > > > >>>Regarding the issue, your proposal wouldn't make for
> > > > > >>>full-duplex as far as I understand since I don't see 
> >how
> > > >
> > > >the
> > > >
> > > > > >>>client would be able to send any data on the same
> > > >
> > > >connection
> > > >
> > > > > >>>_after_ getting connected.
> > > > > >>>
> > > > > >>>What are you using on the other end of the pipe (on 
> >the
> > > > > >>>client)? Plain HTML? Flash? Java? Something else?
> > > > > >>>
> > > > > >>>Bogdan
> > > > > >>>
> > > > > >>>Vinod Panicker wrote:
> > > > > >>>>Hi,
> > > > > >>>>
> > > > > >>>>We have developed a client-server application where 
> >the
> > > >
> > > >server
> > > >
> > > > > >>>>needs to send asynchronous data to the client.  Now 
> >since
> > > >
> > > >we
> > > >
> > > > > >>>>are using Apache/PHP/MySQL, the client needs to poll 
> >the
> > > > > >>>>server periodically for information.
> > > > > >>>>
> > > > > >>>>I was thinking if there was some way to get around 
> >this
> > > >
> > > >basic
> > > >
> > > > > >>>>problem.  I understand that this is how things are
> > > >
> > > >supposed to
> > > >
> > > > > >>>>work, but it would be just great if i could PUSH data 
> > from
> > > >
> > > >the
> > > >
> > > > > >>>>server to the client, using HTTP.
> > > > > >>>>
> > > > > >>>>Since HTTP is a request/response based protocol, 
> >Apache
> > > >
> > > >would
> > > >
> > > > > >>>>not send any data to the client asynchronously.  So 
> >what i
> > > >
> > > >was
> > > >
> > > > > >>>>thinking was - If i tell the server to allow 
> >Keep-Alive
> > > > > >>>>connections, and increase the timeout value and max
> > > >
> > > >requests,
> > > >
> > > > > >>>>I would effectively have a constant TCP connection.  
> >Now
> > > >
> > > >the
> > > >
> > > > > >>>>only problem would be of sending asynchronous data 
> >to
> > > >
> > > >the
> > > >
> > > > > >>>>client.  Solution?  Here goes - If there was some way 
> >in
> > > >
> > > >which
> > > >
> > > > > >>>>i could get hold of the file descriptor(socket) that 
> >is
> > > >
> > > >being
> > > >
> > > > > >>>>used by apache to write data to the client, then i 
> >could,
> > > >
> > > > from
> > > >
> > > > > >>>>a PHP script also send any data to the client using 
> >the
> > > >
> > > >socket
> > > >
> > > > > >>>>functions of PHP since i already have the socket 
> >with
> > > >
> > > >me.
> > > >
> > > > > >>>>This would mean that the client doesnt have to poll 
> >the
> > > >
> > > >server
> > > >
> > > > > >>>>for data any more... and if the connection does get
> > > >
> > > >closed,
> > > >
> > > > > >>>>the client could reconnect to the server asking for
> > > >
> > > >another
> > > >
> > > > > >>>>keep-alive connection.
> > > > > >>>>
> > > > > >>>>Now I know that this is probably the wrong place to 
> >put
> > > >
> > > >such a
> > > >
> > > > > >>>>query - maybe the apache list would have been 
> >better.
> > > >
> > > >But
> > > >
> > > > > >>>>since I'm using PHP out here, i thought i'd give it 
> >a
> > > >
> > > >try.
> > > >
> > > > > >>>>Does the solution sound very outlandish?  Are there 
> >any
> > > > > >>>>pitfalls?  And finally, how do i get hold of the 
> >socket?
> 
> _________________________________________________________
> Click below to visit monsterindia.com and review jobs in India or 
> Abroad
> http://monsterindia.rediff.com/jobs
> 
> 
> 


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to